我如何减少多个Promise.all?

我试图用一个Promise.all内部的reduce ,不能让我的function工作,除非只有一个在我的阵列的用户。 reduce的起始目标是一个Promise 。 第一次通过reducePromise.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()然后返回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)
    ]);
  }));
});
链接地址: http://www.djcxy.com/p/1629.html

上一篇: How do I reduce multiple Promise.all?

下一篇: How do I convert an existing callback API to promises?