Baseline Widely available
async function
宣å被å®ç¾©çºä¸ååå³ AsyncFunction
ç©ä»¶çé忥å½å¼ ã
ä½ ä¹å¯ä»¥ä½¿ç¨ async function expression ä¾å®ç¾©ä¸åé忥å½å¼ã
èªæ³async function name([param[, param[, ... param]]]) { statements }忏
name
å½å¼å稱ã
param
å³éè³å½å¼ç忏å稱ã
statements
çµæè©²å½å¼ä¸»é«çé³è¿°ã
AsyncFunction
ç©ä»¶ï¼ä»£è¡¨èä¸åé忥å½å¼ï¼è©²å½å¼æå·è¡è©²å½å¼å
§çç¨å¼ç¢¼ã
ç¶ async
å½å¼è¢«å¼å«æï¼å®æåå³ä¸å Promise
ãå¦æè©² async
å½å¼åå³äºä¸åå¼ï¼Promise
ççæ
å°çºä¸å帶æè©²åå³å¼ç resolvedã妿 async
å½å¼æåºä¾å¤ææåå¼ï¼Promise
ççæ
å°çºä¸å帶æè¢«æåºå¼ç rejectedã
async å½å¼å
§é¨å¯ä»¥ä½¿ç¨ await
表éå¼ï¼å®ææ«åæ¤ async å½å¼çå·è¡ï¼ä¸¦ä¸çå¾
å³éè³è¡¨éå¼ç Promise çè§£æï¼è§£æå®ä¹å¾æåå³è§£æå¼ï¼ä¸¦ç¹¼çºæ¤ async å½å¼çå·è¡ã
åè¨»ï¼ async/await
å½å¼çç®ç卿¼ç°¡å忥æä½ promise ç表ç¾ï¼ä»¥åå°å¤å Promise
ç©ä»¶å·è¡æäºæä½ãå°±å Promise
é¡ä¼¼æ¼å
·çµæ§æ§çåå¼å½å¼ï¼å樣å°ï¼async/await 好æ¯å° generator è promise çµåèµ·ä¾ã
function resolveAfter2Seconds(x) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function add1(x) {
const a = await resolveAfter2Seconds(20);
const b = await resolveAfter2Seconds(30);
return x + a + b;
}
add1(10).then((v) => {
console.log(v); // prints 60 after 4 seconds.
});
async function add2(x) {
const p_a = resolveAfter2Seconds(20);
const p_b = resolveAfter2Seconds(30);
return x + (await p_a) + (await p_b);
}
add2(10).then((v) => {
console.log(v); // prints 60 after 2 seconds.
});
è¦åï¼ ä¸è¦èª¤è§£ Promise.all
ç await
å¨ add1
裡ï¼è©²å·è¡çºäºç¬¬ä¸å await
èæ«åäºå
©ç§ï¼æ¥èçºäºç¬¬äºå await
åæ«åäºå
©ç§ãå¨ç¬¬ä¸åè¨æå¨ï¼timerï¼è¢«è§¸ç¼åï¼ç¬¬äºåè¨æå¨ä¸¦ä¸æè¢«å»ºç«ãèå¨ add2
裡ï¼å
©åè¨æå¨é½è¢«å»ºç«èµ·ä¾ãä¹é½å·è¡ await
éäºãéæå®å¸¶å¾äº resolve æç 2 ç§æ«åãè䏿¯ 4 ç§æ«åãç¶èéå
©å await
å¼å«é½å¨é£çºéè¡ï¼èéå¹³è¡éè¡ãawait
䏦䏿¯ Promise.all
çèªåç¨å¼ãå¦æä½ æ³è®å
©åãçè³å
©å以ä¸ç await
promises åæå·è¡ï¼in parallelï¼ï¼ä½ å¿
é ä½¿ç¨ Promise.all
.
ä¸å API å¼å«æåå³ç Promise
æå°è´ä¸å promise éï¼å°å½å¼åéæå¤åé¨ä»½ãèæ
®ä¸åçç¨å¼ç¢¼ï¼
function getProcessedData(url) {
return downloadData(url) // returns a promise
.catch((e) => {
return downloadFallbackData(url); // returns a promise
})
.then((v) => {
return processDataInWorker(v); // returns a promise
});
}
å®å¯ä»¥ç¨ä¸åç°¡å®ç async function
便¹å¯«æé樣ï¼
async function getProcessedData(url) {
let v;
try {
v = await downloadData(url);
} catch (e) {
v = await downloadFallbackData(url);
}
return processDataInWorker(v);
}
注æä¸æ¹çç¯ä¾ï¼å¨ return é³è¿°ä¸æ²æä½¿ç¨ await é³è¿°ï¼éæ¯å çº async function çåå³å¼é±å«å°è¢«å
è£æ¼ Promise.resolve
ä¹ä¸ã
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