Baseline Widely available
Promise
å®ä¾ç finally()
æ¹æ³ç¨äºæ³¨åä¸ä¸ªå¨ promise æ²å®ï¼å
ç°ææç»ï¼æ¶è°ç¨ç彿°ãå®ä¼ç«å³è¿åä¸ä¸ªçæç Promise
对象ï¼è¿å¯ä»¥å
è®¸ä½ é¾å¼è°ç¨å
¶ä» promise æ¹æ³ã
è¿å¯ä»¥è®©ä½ é¿å
å¨ promise ç then()
å catch()
å¤çå¨ä¸éå¤ç¼å代ç ã
function checkMail() {
return new Promise((resolve, reject) => {
if (Math.random() > 0.5) {
resolve("Mail has arrived");
} else {
reject(new Error("Failed to arrive"));
}
});
}
checkMail()
.then((mail) => {
console.log(mail);
})
.catch((err) => {
console.error(err);
})
.finally(() => {
console.log("Experiment completed");
});
è¯æ³ åæ°
onFinally
ä¸ä¸ªå½ promise æ²å®æ¶å¼æ¥æ§è¡ç彿°ãå®çè¿åå¼å°è¢«å¿½ç¥ï¼é¤éè¿åä¸ä¸ªè¢«æç»ç promiseãè°ç¨è¯¥å½æ°æ¶ä¸å¸¦ä»»ä½åæ°ã
ç«å³è¿åä¸ä¸ªæ°ç Promise
ãæ è®ºå½å promise çç¶æå¦ä½ï¼æ¤æ°ç promise å¨è¿åæ¶å§ç»å¤äºå¾
å®ï¼pendingï¼ç¶æã妿 onFinally
æåºé误æè¿å被æç»ç promiseï¼åæ°ç promise å°ä½¿ç¨è¯¥å¼è¿è¡æç»ãå¦åï¼æ°ç promise å°ä»¥ä¸å½å promise ç¸åçç¶ææ²å®ï¼settledï¼ã
å¦æä½ æ³å¨ promise æ²å®æ¶è¿è¡ä¸äºå¤çæè
æ¸
çï¼æ 论å
¶ç»æå¦ä½ï¼é£ä¹ finally()
æ¹æ³ä¼å¾æç¨ã
finally()
æ¹æ³ç±»ä¼¼äºè°ç¨ then(onFinally, onFinally)
ãç¶èï¼æå 个ä¸åä¹å¤ï¼
onFinally
åè°å½æ°ä¸æ¥æ¶ä»»ä½åæ°ãè¿ç§æ
嵿°å¥½éç¨äºä½ ä¸å
³å¿æç»åå æå
ç°å¼çæ
åµï¼å æ¤æ éæä¾å®ãfinally()
è°ç¨é常æ¯éæçï¼ä¸ä¼æ´æ¹åå§ promise çç¶æãä¾å¦ï¼
Promise.resolve(2).then(() => 77, () => {})
ä¸åï¼å®è¿åä¸ä¸ªæç»ä¼å
ç°ä¸ºå¼ 77
ç promiseï¼è Promise.resolve(2).finally(() => 77)
è¿åä¸ä¸ªæç»å
ç°ä¸ºå¼ 2
ç promiseãPromise.reject(3).then(() => {}, () => 88)
ä¸åï¼å®è¿åä¸ä¸ªæç»å
ç°ä¸ºå¼ 88
ç promiseï¼è Promise.reject(3).finally(() => 88)
è¿åä¸ä¸ªæç»ä»¥åå 3
æç»ç promiseã夿³¨ï¼ å¨ finally
åè°å½æ°ä¸æåºéè¯¯ï¼æè¿å被æç»ç promiseï¼ä»ä¼å¯¼è´è¿åç promise 被æç»ãä¾å¦ï¼Promise.reject(3).finally(() => { throw 99; })
å Promise.reject(3).finally(() => Promise.reject(99))
é½ä»¥çç± 99
æç»è¿åç promiseã
ä¸ catch()
䏿 ·ï¼finally()
å¨å
é¨è°ç¨å
¶è°ç¨å¯¹è±¡ä¸ç then
æ¹æ³ã妿 onFinally
䏿¯å½æ°ï¼åè°ç¨ then()
æ¶ä½¿ç¨ onFinally
åæ¶ä½ä¸ºä¸¤ä¸ªåæ°ââå¯¹äº Promise.prototype.then()
ï¼è¿æå³ç没æéå ææçå¤çå¨ãå¦åï¼then()
被è°ç¨æ¶ä¼ä½¿ç¨ä¸¤ä¸ªå
é¨å建ç彿°ï¼å
¶è¡ä¸ºå¦ä¸ï¼
è¦åï¼ è¿åªæ¯ä¸ºäºæ¼ç¤ºï¼è䏿¯ä¸ä¸ª polyfillã
promise.then(
(value) => Promise.resolve(onFinally()).then(() => value),
(reason) =>
Promise.resolve(onFinally()).then(() => {
throw reason;
}),
);
å 为 finally()
è°ç¨ then()
ï¼æä»¥å®æ¯æåç±»åãæ¤å¤ï¼è¯·æ³¨æä¸é¢ç Promise.resolve()
è°ç¨ââå®é
ä¸ï¼onFinally()
çè¿å弿¯ä½¿ç¨ä¸ Promise.resolve()
ç¸åçç®æ³è§£å³çï¼ä½ç¨äºæé è§£å³ç promise çå®é
æé 彿°å°æ¯åç±»ãfinally()
éè¿ promise.constructor[Symbol.species]
è·åæé 彿°ã
let isLoading = true;
fetch(myRequest)
.then((response) => {
const contentType = response.headers.get("content-type");
if (contentType && contentType.includes("application/json")) {
return response.json();
}
throw new TypeError("Oops, we haven't got JSON!");
})
.then((json) => {
/* è¿ä¸æ¥å¤ç JSON */
})
.catch((error) => {
console.error(error); // è¿è¡ä»£ç ä¹å¯è½æåºé误ï¼ä¾å¦ï¼when console = {}
})
.finally(() => {
isLoading = false;
});
è§è æµè§å¨å
¼å®¹æ§ åè§
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