我有一个返回函数的函数(异步.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函数。这是可能的还是我需要以不同的方式解决问题?