javascript - 如何减少倍数 Promise.all?
javascript - How do I reduce multiple Promise.all?
我正在尝试在 reduce
中使用 Promise.all
,但我的 function
无法正常工作,除非我的数组中只有一个用户。 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
进行初始化,这是一个函数,尽管 return 是已解析的 Promise
对象,但两者并不相同。
您可以使用 Promise.resolve()
进行初始化,调用 promise.then()
,然后 return Promise.all()
将 .then()
链接在第一个 .then()
中,这会通过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)
]);
}));
});
我正在尝试在 reduce
中使用 Promise.all
,但我的 function
无法正常工作,除非我的数组中只有一个用户。 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
进行初始化,这是一个函数,尽管 return 是已解析的 Promise
对象,但两者并不相同。
您可以使用 Promise.resolve()
进行初始化,调用 promise.then()
,然后 return Promise.all()
将 .then()
链接在第一个 .then()
中,这会通过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)
]);
}));
});