Promise.allSettled - 如何正确抛出错误?

问题描述 投票:0回答:2

我用它来调用 Promise.allSettled。成功场景正在按预期实现

    let data = await Promise.allSettled(body.map(async (index) => {
        return apiHelper.get(index);
    }));

但是,在测试故障场景时,状态为

rejected
的错误永远不会添加到
data
中。在我的 apiHelper 中,我有这个错误处理,代码按预期达到了

} catch (e) {
    throw new Error('Error during API Call: ' + e);
}

但是整个运行时失败并显示一条错误消息。有没有正确的方法来处理

async await
的错误?我尝试在 catch 块中使用
Promise.reject
但每次都会遇到同样的问题。

javascript error-handling async-await promise
2个回答
0
投票

尝试像这样使用 try/catch

let data = await Promise.allSettled(body.map(async (index) => {
  try {
    return apiHelper.get(index);
  } catch (e) {
    // Handle the error here
    return Promise.reject(e);
  }
}));

0
投票

通过检查 allSettled 调用的 Settled Promise 结果:

export default async function allSettledAndThrow<T>(promises: Promise<T>[]): Promise<T[]> {
  const settledPromises = await Promise.allSettled(promises);
  const results: T[] = [];

  for (const settledPromise of settledPromises) {
    if (isRejectedPromise(settledPromise)) {
      throw new Error(settledPromise.reason);
    }

    results.push(settledPromise.value);
  }

  return results;
}

function isRejectedPromise<T>(promise: PromiseSettledResult<T>): promise is PromiseRejectedResult {
  return promise.status === 'rejected';
}
© www.soinside.com 2019 - 2024. All rights reserved.