How do I reduce multiple Promise.all?
I am trying to use a Promise.all inside of a reduce and cannot get my function to work, unless there is only one user in my array. The starting object of the reduce is a Promise . The first time through the reduce , the Promise has .all available on it. The second time through, the .all is not available.
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);
})
How could I perform this operation?
You initialize with Promise which is a function, though return a resolved Promise object, where the two are not the same.
You can initialize with Promise.resolve() , call promise.then() , then return Promise.all() with .then() chained within first .then() , which passes Promise object to next iteration at .reduce() .
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());
})
There's no need to use reduce() . Just map the things and wait them all.
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)
]);
}));
});
链接地址: http://www.djcxy.com/p/1630.html
上一篇: 如何使用Spotify Web API按名称搜索用户
下一篇: 我如何减少多个Promise.all?
