我正在尝试使用reduce
中的promise.all
,除非数组中只有一个用户,否则我的函数
无法工作。Reduce
的起始对象是一个Promise
。第一次通过reduce
时,promise
具有.all
可用。第二次通过时,.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);
})
我怎么做这个手术?
使用promise
进行初始化,这是一个函数,但返回一个解析的promise
对象,其中两者不相同。
您可以使用Promise.Resolve()
进行初始化,调用Promise.then()
,然后返回具有链接在第一个.then()
内的Promise.All()
,它将Promise
对象传递到下一个迭代中的.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());
})
不需要使用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)
]);
}));
});