在 Promise.race() 里判断哪个 Promise 被拒绝,和判断哪个 Promise 被解决的思路类似,都需要在每个 Promise 里携带标识信息。以下有两种方法可以实现。
方法一:在 Promise 拒绝时携带标识
创建 Promise 实例时,在其被拒绝的回调里带上标识信息,这样在 catch 回调中就能依据标识判断是哪个 Promise 被拒绝了。
代码解释
createPromise函数用于创建Promise实例,可通过shouldReject参数控制该Promise是否被拒绝。若被拒绝,会返回一个包含id和错误信息的对象。- 在
Promise.race()的catch回调中,解构出id和error,从而判断是哪个Promise被拒绝,并输出相应信息。
方法二:使用自定义包装函数
自定义一个包装函数,在 Promise 被拒绝时记录其标识。
代码解释
wrapPromise函数对传入的Promise进行包装,在其被解决或拒绝时,返回一个包含id和结果(或错误)的对象。- 在
Promise.race()的catch回调中,解构出id和error,以此判断是哪个Promise被拒绝,并输出相应信息。
通过上述两种方法,你就能在 Promise.race() 中判断是哪个 Promise 被拒绝了。