假设有三个网络请求 A、B 和 C,它们的返回值分别为 "A"、"B" 和 "C",但由于网络延迟的原因,它们的返回顺序是不确定的。请使用 Promise.race() 实现一个函数,它在接收到任意一个请求的返回值后就停止所有请求并返回该值。
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
假设有三个网络请求 A、B 和 C,它们的返回值分别为 "A"、"B" 和 "C",但由于网络延迟的原因,它们的返回顺序是不确定的。请使用 Promise.race() 实现一个函数,它在接收到任意一个请求的返回值后就停止所有请求并返回该值。
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
使用 Promise.race 这个API,把所有网络请求 Promisify 之后都放入到一个数组当中,传递给 Promise.race。
当其中有任意一个请求返回后, Promise.race 就会返回该请求返回的 Promise 对象,再通过调用 .then() 方法就可以获取到返回结果了。
例如说:
function test() {
Promise.race([
fetch('https://api.example.com/A'),
fetch('https://api.example.com/B'),
fetch('https://api.example.com/C')
]).then(res => {
console.log(res.result)
});
}本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
11 回答1.2k 阅读
3 回答965 阅读✓ 已解决
2 回答961 阅读✓ 已解决
3 回答926 阅读✓ 已解决
2 回答649 阅读
1 回答3.3k 阅读
3 回答971 阅读
要使用
Promise.race()实现一个函数,使得在接收到任意一个请求的返回值后就停止所有请求并返回该值,我们可以将每个请求与一个"取消请求"操作组合在一起。这里有一个示例实现:在这个示例中,我们首先创建了一个
fetchApi函数来模拟网络请求。然后,我们定义了一个CancellationToken类,它用于表示取消请求的信号。接着,我们创建了一个cancelableFetchApi函数,它接收一个额外的参数cancellationToken,用于检查请求是否已被取消。在
raceToFirstResponse函数中,我们使用Promise.race()等待所有请求的竞争,并在竞争结束后取消其他未完成的请求。这样,我们就实现了在接收到任意一个请求的返回值后停止所有请求并返回该值的功能。