03代码输出结果-关于promise.race

Promise.all和Promise.race是一对经常放在一起的方法。Promise.all,接受一个数组作为参数,当参数中所有promise抖完成,该promise完成,返回值是全部值的数据。其实很好理解,实验一下也很容易就成功了。
但是对于promise.race。我一开始的理解也是很浅显的,race,赛跑,race中接受的也是参数,但是当跑得最快的那个结束了,整个就结束了。但其实并不是这样。

 function runAsync(x) {
            const p = new Promise(
                r => setTimeout(() => r(x, console.log(x)), 1000))
            return p
        }

        Promise.race([runAsync(1), runAsync(2), runAsync(3), runAsync(4)])
            .then(res => console.log('result', res))```


例如如上的代码块,按照我刚才的理解,应该输出1,然后再输出 result 1就结束了,但真实的结果是这样的
1
result 1
2
3
4

也就是说,其实数组里每个都执行过了,但是then只会接收到第一个,这也是和Promise.all不同之处。为了验证,稍微修改了一下代码。

function runAsync(x) {
            const p = new Promise(r => setTimeout(() => r(x, console.log(x)), -x + 10))
            return p
        }

        Promise.race([runAsync(1), runAsync(2), runAsync(3), runAsync(4)])
            .then(res => console.log('result', res))

之前学习的时候,说到Promise.race的用处,其中一条是,超过一定时间,就不做了,可以节约时间。如果直接向上面那样写,是达不到想要的结果的,因为Promise.race其实数组里的每一个都会做,可以接合reject一起使用,达到这样的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值