Baseline Widely available
Promise.all()
æ¹æ³åå³ä¸å Promise
ç©ä»¶ï¼ç¶å¼æ¸ iterable
䏿æç promises é½è¢«å¯¦ç¾ï¼resolvedï¼ï¼æå¼æ¸ iterable ä¸å«ä»»ä½ promise æï¼è¢«å¯¦ç¾ãæä»¥ç¬¬ä¸å被æçµç promise çåå 被æçµã
Promise
ï¼è¥å³å
¥ç iterable çºç©ºãPromise
è¥å³å
¥ç iterable ä¸å« promiseãæ³¨æï¼Google Chrome 58 å°æ¤æ
å½¢åå³ä¸å已被解決ç promiseãPromise
ï¼å°ææå©é¤æ
å½¢ãæ¤ promise æ¥è被é忥å°è¢« resolved/rejectedï¼åªè¦å ççºç©ºï¼ç¶ iterable 䏿æç promises é½è¢«å¯¦ç¾ï¼æå
¶ä¸ä¸å被æçµãåè¦ä¸æ¹éæ¼"Promise.all çé忥è忥æ§è³ª"çä¾åãæ¤æ¹æ³å¨èéï¼aggregatingï¼å¤å promises ççµææå¾æå¹«å©ã
實ç¾ï¼Fulfillmentï¼ï¼ è¥å³å
¥ç©ºç iterableï¼æ¤æ¹æ³ï¼åæ¥å°ï¼åå³ä¸å已被解決ç promiseãè¥ææå³å
¥ç promises é½è¢«å¯¦ç¾ï¼æé½ä¸æ¯ promiseï¼Promise.all
åå³ç promise 被é忥å°å¯¦ç¾ãç¡è«æ¯åªåæ
å½¢ï¼åå³ä¸å以 iterable å
¶å
§ææå¼ï¼å
å«é promise å¼ï¼ä½çºå¼æ¸çé£å被實ç¾ã
æçµï¼Rejectionï¼ï¼ è¥ä»»ä¸åå³å ¥ç promise 被æçµï¼Promise.all é忥å°ä»¥å ¶å¼è¢«æçµï¼ç¡è«å ¶ä» promises æ¯å¦è¢«è§£æ±ºã
ç¯ä¾ 使ç¨Promise.all
Promise.all
çå°å
¨é¨å¯¦ç¾ï¼æä¸åæçµï¼ã
var p1 = Promise.resolve(3);
var p2 = 1337;
var p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, "foo");
});
Promise.all([p1, p2, p3]).then((values) => {
console.log(values); // [3, 1337, "foo"]
});
è¥ iterable å«é promise å¼ï¼å®åå°è¢«å¿½ç¥ï¼ä½ä¾ç¶æè¢«è¨å ¥åå³ promise é£åå¼ï¼è¥è¢«å¯¦ç¾ï¼ï¼
// this will be counted as if the iterable passed is empty, so it gets fulfilled
var p = Promise.all([1, 2, 3]);
// this will be counted as if the iterable passed contains only the resolved promise with value "444", so it gets fulfilled
var p2 = Promise.all([1, 2, 3, Promise.resolve(444)]);
// this will be counted as if the iterable passed contains only the rejected promise with value "555", so it gets rejected
var p3 = Promise.all([1, 2, 3, Promise.reject(555)]);
// using setTimeout we can execute code after the stack is empty
setTimeout(function () {
console.log(p);
console.log(p2);
console.log(p3);
});
// logs
// Promise { <state>: "fulfilled", <value>: Array[3] }
// Promise { <state>: "fulfilled", <value>: Array[4] }
// Promise { <state>: "rejected", <reason>: 555 }
Promise.all
çé忥è忥æ§è³ª
以ä¸ä¾åé©èäº Promise.all
çé忥æ§è³ªï¼asynchronicityï¼ï¼æåæ¥æ§è³ªï¼synchronicityï¼ï¼è¥å³å
¥ç iterable æ¯ç©ºçï¼ï¼
// we are passing as argument an array of promises that are already resolved,
// to trigger Promise.all as soon as possible
var resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
var p = Promise.all(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>: Array[2] }
ç¶
Promise.all
被æçµæç¼ç䏿¨£çäºæ
ï¼
var mixedPromisesArray = [Promise.resolve(33), Promise.reject(44)];
var p = Promise.all(mixedPromisesArray);
console.log(p);
setTimeout(function () {
console.log("the stack is now empty");
console.log(p);
});
// logs
// Promise { <state>: "pending" }
// the stack is now empty
// Promise { <state>: "rejected", <reason>: 44 }
注æï¼Promise.all
忥å°è¢«è§£æ±ºè¥ä¸å¯è¥å³å
¥ç iterable çºç©ºï¼
var p = Promise.all([]); // will be immediately resolved
var p2 = Promise.all([1337, "hi"]); // non-promise values will be ignored, but the evaluation will be done asynchronously
console.log(p);
console.log(p2);
setTimeout(function () {
console.log("the stack is now empty");
console.log(p2);
});
// logs
// Promise { <state>: "fulfilled", <value>: Array[0] }
// Promise { <state>: "pending" }
// the stack is now empty
// Promise { <state>: "fulfilled", <value>: Array[2] }
Promise.all
ç失æåªå
ï¼fail-fastï¼è¡çº
ç¶ä»»ä¸åé£åæå¡è¢«æçµå
Promise.all
被æçµãä¾å¦ï¼è¥å³å
¥ååå°å¨ä¸æ®µæéå¾è¢«è§£æ±ºç promisesï¼èå
¶ä¸ä¸åç«å»è¢«æçµï¼å Promise.all
å°ç«å»è¢«æçµã
var p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, "one");
});
var p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 2000, "two");
});
var p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 3000, "three");
});
var p4 = new Promise((resolve, reject) => {
setTimeout(resolve, 4000, "four");
});
var p5 = new Promise((resolve, reject) => {
reject("reject");
});
Promise.all([p1, p2, p3, p4, p5]).then(
(values) => {
console.log(values);
},
(reason) => {
console.log(reason);
},
);
//From console:
//"reject"
//You can also use .catch
Promise.all([p1, p2, p3, p4, p5])
.then((values) => {
console.log(values);
})
.catch((reason) => {
console.log(reason);
});
//From console:
//"reject"
è¦ç¯ ç覽å¨ç¸å®¹æ§ åè¦
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