您的位置:首页> 前端教程> ES6教程
文章导航

Promise.race() 方法

2019-7-25 12:32| 作者: admin| 查看: 1641| 评论: 0|来自: 蚂蚁部落

关于Promise对象的基本介绍可以参阅JavaScript Promise 对象一章节。

Promise的静态方法,将多个Promise对象包装成一个新的Promise对象。

race翻译成汉语具有"竞赛"或者"赛跑"的意思,恰如其名,哪个Promise对象状态改变的快。

方法返回的Promise对象的状态就随着对应的Promise对象状态发生改变。

语法结构:

[JavaScript] 纯文本查看 复制代码
p=Promise.race(iterable);

语法解析:

(1).iterable:必需,具有遍历器接口的对象。

iterable中的元素是Promise对象,如果不是,需要用Promise.resolve()将其转换为一个Promise对象。

只要iterable中的任意一个Promise对象状态改变,那么p对象状态也会跟着改变。

代码实例如下:

[JavaScript] 纯文本查看 复制代码运行代码
let p1 = new Promise(function(resolve, reject) { 
    setTimeout(resolve, 500, "蚂蚁部落一"); 
});
var p2 = new Promise(function(resolve, reject) { 
    setTimeout(resolve, 100, "蚂蚁部落二"); 
});
  
Promise.race([p1, p2]).then(function(value) {
  console.log(value);
});

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201907/25/123415wawdyztoeogd5dd5.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

代码分析如下:

(1).Promise.race() 方法参数是一个数组,数组元素是Promise对象。

(2).很明显是p2的状态首先发生变化,于是将"蚂蚁部落二"传递给then的回调函数。

(3).所以打印结果是"蚂蚁部落二"。

[JavaScript] 纯文本查看 复制代码运行代码
let p1 = new Promise(function(resolve, reject) { 
    setTimeout(reject, 50, "蚂蚁部落一"); 
});
var p2 = new Promise(function(resolve, reject) { 
    setTimeout(resolve, 100, "蚂蚁部落二"); 
});
  
Promise.race([p1, p2]).then(function(value) {
  console.log(value);
},function(value){
  console.log(value);
});

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201907/25/123440ldn1wn00aa9a000n.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

代码分析如下:

(1).Promise.race() 方法参数是一个数组,数组元素是Promise对象。

(2).很明显是p1的状态首先发生改变,变为rejected。

(3).于是会执行then的第二个回调函数,并将"蚂蚁部落一"作为参数传递给回调函数。

(4).所以最终打印结果是"蚂蚁部落一"。

1

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (1 人)

最新评论

返回顶部