【问题标题】:javascript - How do I reduce multiple Promise.all?javascript - 如何减少多个 Promise.all?
【发布时间】:2017-09-12 00:26:27
【问题描述】:

我正在尝试在 reduce 中使用 Promise.all 并且无法让我的 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);
})

我该如何执行此操作?

【问题讨论】:

  • 无论如何,promisePromise 之间有一个明显的大小写错误。
  • 小写的promise只是reduce的第一个参数,将Promise作为初始对象。这不是错字。
  • 没有Promise.prototype.all()。仅限Promise.all()
  • 第一个参数中的promise 是初始对象中的Promise。这就是为什么它第一次通过循环工作。这就是为什么Promise.all 最初可用的原因。
  • 我对此表示怀疑。你正在调用一个不存在的函数。

标签: javascript promise reduce


【解决方案1】:

您使用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()。使用.reduce()的目的是什么?
【解决方案2】:

没有必要使用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)
    ]);
  }));
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 2018-08-03
    • 2019-10-26
    • 1970-01-01
    • 2017-10-13
    • 2021-11-16
    • 2017-01-08
    相关资源
    最近更新 更多