如何在promise.all上处理挂起的promise

时间:2017-04-27 18:06:09

标签: javascript es6-promise

我有一个对象数组,并使用Promise.all映射每个对象上特定属性的Api调用返回的值

初始调用如下所示:

   Promise.all(jobs.map(job => convertItemsl(job)))
        .then( 
    doSomething()
        });
      })
  .catch(err)

function convertItemsl (job){
  return myApi.getItem(job.id).then( response => {
    const name = response.name ? response.name : ‘’;
    return {
        name: name,
        status: job.status
      };
    }
  )
}

API调用:

  getItem(){
    return super.get('jobs').then(res => res.json());
  }

我遇到的问题是,有些情况下会在某些电话中找不到Api。

在按照数组调用Api之后,我想继续并返回映射对象,无论如何。

1 个答案:

答案 0 :(得分:1)

我的猜测是myApi.getItem拒绝承诺。你需要以某种方式捕获这种拒绝:

function convertItemsl (job){
  return myApi.getItem(job.id).then( response => {
    const name = response.name ? response.name : ‘’;
    return {
        name: name,
        status: job.status
      };
    }
  ).catch(err => {
    return {
        name: null,
        // err.code or whatever your error looks like, maybe just 404
        status: err.code
    }
  })
}