【问题标题】:Rest API redundancy with promises带有承诺的 Rest API 冗余
【发布时间】:2022-11-28 07:52:05
【问题描述】:
如果我手头有一些异步 fetch() 和它们各自的承诺,我会寻求实现一个功能,以便最早解析为 Response() 且状态代码为 200 将返回非常 Response 并将其他所有内容丢弃到垃圾收集器的边缘地带。另一方面,如果没有一个使用代码 200 解析,则返回具有非 200 代码的最新解析。
实现这一目标的最优雅方法是什么?我不太喜欢 js - 我相信应该有某种广泛使用的模式......
【问题讨论】:
标签:
javascript
typescript
async-await
promise
【解决方案1】:
这是Promise.any 的完美用例。它从一组承诺中以最快的速度实现,并且仅在所有承诺都被拒绝后才拒绝(与Promise.race相反)。所以你会用
const responsePromises = [fetch(…), fetch(…), …];
const fastestResponse = await Promise.any(responsePromises.map(p => p.then(response => {
if (response.status == 200) return response;
else throw new Error('Non-200 response');
}));