只返回履行的承诺

时间:2021-01-25 16:05:41

标签: javascript promise

我对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())))

1 个答案:

答案 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