我对api做了很多请求。我需要的是只返回履行的承诺,所以我可以在之后使用它们,使用 json() 函数。 经过一番谷歌搜索后,我现在有了这个代码,但似乎不起作用。这样做的正确方法是什么?
async function requestAPI(items) {
var requests = items.map(item => fetch(url).catch(e => e))
return Promise.all(requests);
}
getUrls()
.then(result => requestAPI(result))
.then(result => Promise.all(result.map(v => v.json())))
答案 0 :(得分:0)
我认为您想为此使用 Promise.allSettled ,它为传递给它的每个承诺提供状态,无论它是否已满或失败,下面是您更新的代码
async function requestAPI(items) {
var requests = items.map(item => fetch(url));
return Promise.allSettled(requests);
}
function getOnlyFulFilled(allResults) {
const fulfilledResult = [];
allResults.forEach((result) => {
if (result.status === "fulfilled") {
fulfilledResult.push(result.value);
}
});
return fulfilledResult;
}
getUrls()
.then(result => requestAPI(result))
.then((allResults) => {
return getOnlyFulFilled(allResults);
})
.then(result => Promise.allSettled(result.map(v => v.json())))
.then((allResult) => getOnlyFulFilled(allResults));
请参考这里了解更多信息
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled