如果阅读有疑问的话,欢迎评论或私信!!
本人会很热心的阐述自己的想法!谢谢!!!
文章目录
- 前言
- 初识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至少可以为我们提供设置超时的功能。