尽管使用了.catch语句,但是Promise.all返回被拒绝的Promises作为结果

时间:2017-06-16 11:52:51

标签: javascript promise

我有一个返回函数的函数(异步.get调用)。这里我在catch语句中返回一个空对象:

export function makeHttpStatsProvider(fisClientRoot, httpClient, selectedDate = null) {
    return async function(polygon, layerName) {
        const response = await httpClient.get(
         ///request logic
        }}).catch((e) => {
          return {}
        }).then((response) => {
          return {[layerName]: response.data[layerName][0].basicStats}
        })
    }
}

然后我有一个函数,它接受了这个承诺并制作了一系列承诺:

export async function harvestMap(statsProvider, polygons, numBuckets = 5) {

    const arrayOfPromises = polygons.map(async (polygon) => {
      Object.assign({}, polygon, await statsProvider(polygon, 'EVI'))
    })

    return Promise.all(arrayOfPromises)
      .catch((err) => {
        console.log('a promise failed to resolve', err)
        return arrayOfPromises
      })
      .then((arrayOfPromises) => {
        return arrayOfPromises.sort((a, b) => a.EVI.mean - b.EVI.mean).map((polygon, index) => Object.assign({}, polygon, {
          rank: Math.floor(index * numBuckets / polygons.length)
        }))
      })

}

这里.catch语句console.log出错。但尽管如此,.then()语句中的arrayOfPromises仍然包含被拒绝的承诺。

我想要实现的是在网络请求失败时返回自定义对象,稍后将其传递给Object.assign函数。这是可能的还是我需要以不同的方式解决问题?

0 个答案:

没有答案