如果阅读有疑问的话,欢迎评论或私信!!
本人会很热心的阐述自己的想法!谢谢!!!
文章目录
- 前言
- 初识Promise.race
- 探索Promise.race
- API实例
前言
在本栏前一篇Promise.all
中,我们可以实现多个并发Promise的运行
。但是,在有的时候我们或许要实现多个Promise中只取完成最快的Promise
。这时我们可以使用Promise中另外一个API——Promise.race
。
初识Promise.race
我们在获取多个Promise其中的一个时:
- 我们有一个词语
“门闩(shuan)”
,(我也是问了一下度娘,嘻嘻); - 又有些像操作系统中,我们在并发进程里叫的
“互斥”(即每次只让一个进程运行
); - 但在Promise中我们称为
“竞态”
。
好吧,名称只需要记忆即可,我们来正式认识这个API。
探索Promise.race
Promise.race()和Promise.all()一样也接受单个数组参数
(数组可以是Promise、立即值),立即值在这里没有意义
,因为它会立即决议
。
注意:Promise.race参数如果是
空数组
,那么它会一直挂起,而从不决议。如下所示:
Promise.race([]).then(function(msg){console.log(msg)},function(err){console.error(err)})//控制台不输出
而Promise.all中的行为却表现的相反:
Promise.all([]).then(function(msg){console.log(msg)},function(err){console.error(err)})//控制台输出[]
API实例
回顾之前Promise解决信任问题的一个代码:
function timeoutPromise(delay){return new Promise(function(resolve,reject){setTimeout(function(){reject("超时了");},delay)})
})
下面我们用这个代码和Promise.race同用,看看会出现什么效果:
Promise.race([test(),timeoutPromise(3000)
]).then({function(){//只有没有超时才会进入}function(err){}
})
看来这个API至少可以为我们提供设置超时的功能。