提问者:小点点

JavaScript-我如何减少多重promise。all?


我正在尝试使用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);
})

我怎么做这个手术?


共2个答案

匿名用户

使用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)
    ]);
  }));
});