我用它来调用 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
但每次都会遇到同样的问题。
尝试像这样使用 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);
}
}));
通过检查 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';
}