2017-04-16 45 views
0

我想在reduce里面使用Promise.all,并且不能让我的function工作,除非我的数组中只有一个用户。 reduce的起始对象是Promise。第一次通过reducePromise.all可用。第二次通过,.all不可用。javascript - 如何减少多个Promise.all?

return UserQueries.addUsersOnCasefileCreate(input).then(users => { 
    return users.reduce((promise, user) => { 
    return promise.all([ 
     AddressQueries.addAddress(user.address, user.userId, input.orgId), 
     EmailQueries.addEmail(user.emails, user.userId, input.orgId), 
     PhoneQueries.addPhones(user.phones, user.userId, input.orgId) 
    ]) 
    .then(() => Promise.resolve(user)) 
    }, Promise); 
}) 

我该怎么做这个操作?

+0

无论如何,在'promise'和'Promise'之间存在明显的大写错别字。 –

+0

小写的'promise'只是'reduce'的第一个参数,指的是'Promise'作为初始对象。这不是一个错字。 – jhamm

+0

没有'Promise.prototype.all()'。只有'Promise.all()'。 –

回答

1

初始化为Promise这是一个函数,虽然返回一个已解析的Promise对象,其中两者不一样。

您可以Promise.resolve()初始化,调用promise.then(),然后用.then()内第一.then(),这在.reduce()传递Promise对象下一次迭代链接返回Promise.all()

return UserQueries.addUsersOnCasefileCreate(input).then(users => { 
    return users.reduce((promise, user) => { 
    return promise.then(() => Promise.all([ 
     AddressQueries.addAddress(user.address, user.userId, input.orgId), 
     EmailQueries.addEmail(user.emails, user.userId, input.orgId), 
     PhoneQueries.addPhones(user.phones, user.userId, input.orgId) 
    ])) 
    .then(() => user)) 
    }, Promise.resolve()); 
}) 
+0

我试过了,但我只得到结果中的最后一个用户。我没有得到其他插入的用户。 – jhamm

+0

你是什么意思?“我没有得到其他插入的用户。”?如果预期结果是结果数组,则不需要使用'.reduce()'。使用'.reduce()'的目的是什么? – guest271314

1

有没有必要使用reduce()。只需映射这些东西并全部等待。

return UserQueries.addUsersOnCasefileCreate(input).then(users => { 
    return Promise.all(users.map((user) => { 
    return Promise.all([ 
     AddressQueries.addAddress(user.address, user.userId, input.orgId), 
     EmailQueries.addEmail(user.emails, user.userId, input.orgId), 
     PhoneQueries.addPhones(user.phones, user.userId, input.orgId) 
    ]); 
    })); 
});