探索Promise异步模式抽象的变体——Promise.race篇

在这里插入图片描述

如果阅读有疑问的话,欢迎评论或私信!!
本人会很热心的阐述自己的想法!谢谢!!!

前言

在本栏前一篇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至少可以为我们提供设置超时的功能。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小井

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值