Baseline Widely available
Promise.race(iterable)
æ¹æ³åå³ä¸å promise ç©ä»¶ï¼æ¤ promise ç©ä»¶ææ¼ iterable 弿¸ä¸ä»»ä¸å promise è½çº resolve æ rejected æç«å³è½è®æ resolve æ rejectedï¼ä¸¦ä¸æ¥æ¶å
¶æå弿失æè¨æ¯ã
ä¸å iterable ç©ä»¶ï¼åæ¯ Array
. è«åèå¯è¿ä»£åè°ã
ç¶å³å
¥ç iterable 䏿 promise è¢«å¯¦ç¾ææçµæï¼ç«å»åå³è¢«å¯¦ç¾ææçµç Promise
ã
race
å½å¼åå³ä¸åèå³å
¥ç iterable ä¹ä¸ç¬¬ä¸å被解決ï¼settledï¼ç promise ç¸åæ¹å¼è¢«è§£æ±ºï¼ä¸ä»¥ç¸åå¼ï¼ç Promise
ã
Promise.race
çé忥æ§è³ª
以ä¸ä¾åæ¼ç¤ºäº Promise.race
çé忥æ§è³ªï¼
// we are passing as argument an array of promises that are already resolved,
// to trigger Promise.race as soon as possible
var resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
var p = Promise.race(resolvedPromisesArray);
// immediately logging the value of p
console.log(p);
// using setTimeout we can execute code after the stack is empty
setTimeout(function () {
console.log("the stack is now empty");
console.log(p);
});
// logs, in order:
// Promise { <state>: "pending" }
// the stack is now empty
// Promise { <state>: "fulfilled", <value>: 33 }
ä¸å空ç iterable é æåå³ç promise æ°¸ä¹ æ±ç½®ï¼
var foreverPendingPromise = Promise.race([]);
console.log(foreverPendingPromise);
setTimeout(function () {
console.log("the stack is now empty");
console.log(foreverPendingPromise);
});
// logs, in order:
// Promise { <state>: "pending" }
// the stack is now empty
// Promise { <state>: "pending" }
è¥ iterable 䏿ä¸åæå¤åé promise å¼ä¸ï¼æä¸åå·²ç¶è¢«å¯¦ç¾ï¼è§£æ±ºç promiseï¼Promise.race
å°ä»¥é£åä¸ç¬¬ä¸å鿍£çå¼è§£æ±ºï¼
var foreverPendingPromise = Promise.race([]);
var alreadyResolvedProm = Promise.resolve(666);
var arr = [foreverPendingPromise, alreadyResolvedProm, "non-Promise value"];
var arr2 = [foreverPendingPromise, "non-Promise value", Promise.resolve(666)];
var p = Promise.race(arr);
var p2 = Promise.race(arr2);
console.log(p);
console.log(p2);
setTimeout(function () {
console.log("the stack is now empty");
console.log(p);
console.log(p2);
});
// logs, in order:
// Promise { <state>: "pending" }
// Promise { <state>: "pending" }
// the stack is now empty
// Promise { <state>: "fulfilled", <value>: 666 }
// Promise { <state>: "fulfilled", <value>: "non-Promise value" }
ä½¿ç¨ Promise.race
å setTimeout
çç¯ä¾
var p1 = new Promise(function (resolve, reject) {
setTimeout(resolve, 500, "one");
});
var p2 = new Promise(function (resolve, reject) {
setTimeout(resolve, 100, "two");
});
Promise.race([p1, p2]).then(function (value) {
console.log(value); // "two"
// Both resolve, but p2 is faster
});
var p3 = new Promise(function (resolve, reject) {
setTimeout(resolve, 100, "three");
});
var p4 = new Promise(function (resolve, reject) {
setTimeout(reject, 500, "four");
});
Promise.race([p3, p4]).then(
function (value) {
console.log(value); // "three"
// p3 is faster, so it resolves
},
function (reason) {
// Not called
},
);
var p5 = new Promise(function (resolve, reject) {
setTimeout(resolve, 500, "five");
});
var p6 = new Promise(function (resolve, reject) {
setTimeout(reject, 100, "six");
});
Promise.race([p5, p6]).then(
function (value) {
// Not called
},
function (reason) {
console.log(reason); // "six"
// p6 is faster, so it rejects
},
);
è¦ç¯ ç覽å¨ç¸å®¹æ§ åè¦
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4