首页 > 解决方案 > 减少一个 Promise.all?

问题描述

我想多次调用我的api,然后只返回我的错误对象(这里是工人)

你怎么看这个实现?(我不喜欢,.then(()=> false但即使使用reduce,我也没有找到更好的实现)

我想避免在 Promise.all 之后过滤

谢谢

updateWorkersStatusOnMissions: (workersOnMissions, apiService) => {
    const updateWorkerStatusOnMissionPromises = workersOnMissions
      .map(workerOnMission =>
        apiService.put('missions', formatWorkerOnMission(workerOnMission))
          .then(() => false)
          .catch(() => formatWorkerInError(workerOnMission))
      )
    return Promise
      .all(updateWorkerStatusOnMissionPromises)
      .then(filter(Boolean))
  },

标签: javascriptpromisees6-promisereduce

解决方案


我通常做的是在结果周围引入某种“框”,以便告诉我从承诺中得到的结果的“种类”。一个promise总是会返回一个值给你,但是取决于它提供then(onSuccess, onFail)的地方,类型是不同的。

const into = type => val => ({ type, val })

const arrayOfstuff = [];

const arrayOfPromises = arrayOfstuff.map(stuff => makePromise(stuff)
  .then(into("success"), into("error")))

const successFullStruff = Promise.all(arrayOfPromises)
  .then(filter(result => result.type === "success"))

const failedStuff = Promise.all(arrayOfPromises)
  .then(filter(result => result.type === "error"))

推荐阅读