该特性处于 ECMAScript 6 规范草案中,目前的实现在未来可能会发生微调,请谨慎使用。
概述
Promise.race(iterable)方法返回一个promise,这个promise在iterable中的
任意一个promise被解决或拒绝后,
立刻以相同的解决值
被解决或以相同的拒绝原因被
拒绝。
语法
Promise.race(iterable);
参数
描述
race
函数返回一个Promise,这个Promise根据传入的Promise中的第一个确定状态--不管是接受还是拒绝--的状态而确定状态。
示例
使用Promise.race
– 使用setTimeout的示例
var 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); // "二" // 两个都解决,但p2更快 }); var p3 = new Promise(function(resolve, reject) { setTimeout(resolve, 100, "三"); }); var p4 = new Promise(function(resolve, reject) { setTimeout(reject, 500, "四"); }); Promise.race([p3, p4]).then(function(value) { console.log(value); // "三" // p3更快,所以被解决(resolve)了 }, function(reason) { // 未被执行 }); var p5 = new Promise(function(resolve, reject) { setTimeout(resolve, 500, "五"); }); var p6 = new Promise(function(resolve, reject) { setTimeout(reject, 100, "六"); }); Promise.race([p5, p6]).then(function(value) { // 未被执行 }, function(reason) { console.log(reason); // "六" // p6更快,所以被拒绝(reject了) });
规范
规范 | 状态 | 备注 |
---|---|---|
domenic/promises-unwrapping | 草稿 | 标准化工作正在这里进行 |
ECMAScript 6 (ECMA-262) Promise.race |
Release Candidate | ECMA标准的首次定义 |
浏览器兼容性
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | 32 | 29.0 (29.0) | 未实现 | 19 | 7.1 |
Feature | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|
Basic support | 未实现 | 29.0 (29.0) | 未实现 | 未实现 | iOS 8 | 32 |