Baseline Widely available
Promise
å®ä¾ç catch()
æ¹æ³ç¨äºæ³¨åä¸ä¸ªå¨ promise 被æç»æ¶è°ç¨ç彿°ãå®ä¼ç«å³è¿åä¸ä¸ªçæç Promise
对象ï¼è¿å¯ä»¥å
è®¸ä½ é¾å¼è°ç¨å
¶ä» promise çæ¹æ³ãæ¤æ¹æ³æ¯ Promise.prototype.then(undefined, onRejected)
çä¸ç§ç®åå½¢å¼ã
const promise1 = new Promise((resolve, reject) => {
throw new Error("Uh-oh!");
});
promise1.catch((error) => {
console.error(error);
});
// Expected output: Error: Uh-oh!
è¯æ³ åæ°
onRejected
ä¸ä¸ªå¨æ¤ Promise 对象被æç»æ¶å¼æ¥æ§è¡ç彿°ãå®çè¿åå¼å°æä¸º catch()
è¿åç Promise 对象çå
ç°å¼ãæ¤å½æ°è¢«è°ç¨æ¶å°ä¼ å
¥ä»¥ä¸åæ°ï¼
reason
Promise 对象çæç»å¼ã
è¿åä¸ä¸ªæ°ç Promise
ï¼æ 论å½åç promise ç¶æå¦ä½ï¼è¿ä¸ªæ°ç promise å¨è¿åæ¶æ»æ¯å¤äºå¾
å®ï¼pendingï¼ç¶æã妿è°ç¨äº onRejected
ï¼åè¿åç promise å°æ ¹æ®æ¤è°ç¨çè¿åå¼è¿è¡å
ç°ï¼æè
ä½¿ç¨æ¤è°ç¨å¼åçé误è¿è¡æç»ã妿å½åç promise å·²å
ç°ï¼å onRejected
ä¸ä¼è¢«è°ç¨ï¼å¹¶ä¸è¿åç promise å
·æç¸åçå
ç°å¼ã
catch
æ¹æ³ç¨äºå¨ Promise é¾è¿è¡é误å¤çï¼å ä¸ºå®æ»æ¯ä¼è¿åä¸ä¸ª Promise
ï¼æä»¥å®å¯ä»¥å then()
æ¹æ³ä¸æ ·è¢«é¾å¼è°ç¨ã
妿ä¸ä¸ª promise 被æç»å¹¶ä¸æ²¡æå¯è°ç¨çæç»å¤çå¨ï¼å¤çå¨å¯ä»¥æ¯ Promise.prototype.then()
ãPromise.prototype.catch()
æ Promise.prototype.finally()
ï¼ï¼åæç»äºä»¶ç±å®¿ä¸»ç¯å¢æ¥æä¾ã卿µè§å¨ä¸ï¼è¿å°è§¦å unhandledrejection
äºä»¶ã妿å°ä¸ä¸ªå¤çå¨éå å°ä¸ä¸ªå·²è¢«æç»ï¼ä¸å·²å¯¼è´æªå¤ççæç»äºä»¶ç promiseï¼å°ä¼è§¦å rejectionhandled
äºä»¶ã
catch()
æ¹æ³å
é¨ä¼è°ç¨å½å promise 对象ç then()
æ¹æ³ï¼å¹¶å° undefined
å onRejected
ä½ä¸ºåæ°ä¼ éç» then()
ã该è°ç¨çè¿åå¼ç´æ¥è¢«è¿åãå¦æä½ å¯¹è¿äºæ¹æ³è¿è¡å°è£
ï¼è¿ä¸ç¹æ¯å¯ä»¥è§å¯å°çã
// éå忬ç Promise.prototype.then/catch æ¹æ³ï¼åªæ¯ä¸ºäºæ·»å ä¸äºæ¥å¿
((Promise) => {
const originalThen = Promise.prototype.then;
const originalCatch = Promise.prototype.catch;
Promise.prototype.then = function (...args) {
console.log("å¨ %o ä¸è°ç¨ .then æ¹æ³ï¼åæ°ä¸ºï¼%o", this, args);
return originalThen.apply(this, args);
};
Promise.prototype.catch = function (...args) {
console.error("å¨ %o ä¸è°ç¨ .catch æ¹æ³ï¼åæ°ä¸ºï¼%o", this, args);
return originalCatch.apply(this, args);
};
})(Promise);
// 对已ç»è§£å³ç Promise è°ç¨ catch
Promise.resolve().catch(function XXX() {});
// è¾åºï¼
// å¨ Promise{} ä¸è°ç¨ .catchï¼åæ°ä¸ºï¼Arguments{1} [0: function XXX()]
// å¨ Promise{} ä¸è°ç¨ .thenï¼åæ°ä¸ºï¼Arguments{2} [0: undefined, 1: function XXX()]
è¿æå³çä¼ å
¥ undefined
ä»ç¶ä¼å¯¼è´è¿åç promise 被æç»ï¼ä½ å¿
é¡»ä¼ å
¥ä¸ä¸ªå½æ°æ¥é²æ¢æç»ç promise 被æç»ã
å 为 catch()
åªæ¯å纯çè°ç¨äº then()
ï¼å®æ¯æåç±»åã
夿³¨ï¼ ä¸é¢çç¤ºä¾æåºäº Error
çå®ä¾ãä¸åæ¥ç throw
è¯å¥ä¸æ ·ï¼è¿è¢«è®¤ä¸ºæ¯ä¸ç§è¯å¥½çå®è·µï¼å¦åï¼æ§è¡æè·çé¨åå°ä¸å¾ä¸å¯¹åæ°è¿è¡æ£æ¥ï¼ä»¥æ¥ç宿¯åç¬¦ä¸²è¿æ¯é误ï¼å¹¶ä¸ä½ å¯è½ä¼ä¸¢å¤±æç¨çä¿¡æ¯ï¼ä¾å¦å æ è·è¸ªã
const p1 = new Promise((resolve, reject) => {
resolve("æåï¼");
});
p1.then((value) => {
console.log(value); // "æåï¼"
throw new Error("å¢ï¼ä¸ï¼");
})
.catch((e) => {
console.error(e.message); // "å¢ï¼ä¸ï¼"
})
.then(
() => console.log("å¨ catch åï¼è°ç¨é¾æ¢å¤äº"),
() => console.log("å 为æäº catch èä¸ä¼è¢«è§¦å"),
);
// ä¸é¢çè¡ä¸ºä¸ä¸é¢ç¸å
p1.then((value) => {
console.log(value); // "æåï¼"
return Promise.reject("å¢ï¼ä¸ï¼");
})
.catch((e) => {
console.error(e); // "å¢ï¼ä¸ï¼"
})
.then(
() => console.log("å¨ catch åï¼è°ç¨é¾æ¢å¤äº"),
() => console.log("å 为æäº catch èä¸ä¼è¢«è§¦å"),
);
æåºé误æ¶çé·é±
大夿°æ
åµä¸ï¼æåºé误ä¼è°ç¨ catch()
æ¹æ³ï¼
const p1 = new Promise((resolve, reject) => {
throw new Error("å¦å¼ï¼");
});
p1.catch((e) => {
console.error(e); // "å¦å¼ï¼"
});
å¨å¼æ¥å½æ°å 鍿åºçé误ä¼åæªæè·çéè¯¯ä¸æ ·ï¼
const p2 = new Promise((resolve, reject) => {
setTimeout(() => {
throw new Error("æªæè·çå¼å¸¸ï¼");
}, 1000);
});
p2.catch((e) => {
console.error(e); // æ°¸è¿ä¸ä¼è¢«è°ç¨
});
å¨è°ç¨ resolve
ä¹åæåºçé误ä¼è¢«å¿½ç¥ï¼
const p3 = new Promise((resolve, reject) => {
resolve();
throw new Error("Silenced Exception!");
});
p3.catch((e) => {
console.error(e); // è¿éæ°¸è¿ä¸ä¼æ§è¡
});
妿 Promise å·²å
ç°ï¼catch() ä¸ä¼è¢«è°ç¨
// å建ä¸ä¸ªä¸ä¼è°ç¨ onReject ç Promise
const p1 = Promise.resolve("è°ç¨ä¸ä¸ä¸ª");
const p2 = p1.catch((reason) => {
// è¿éæ°¸è¿ä¸ä¼æ§è¡
console.error("p1 ç catch 彿°è¢«è°ç¨äºï¼");
console.error(reason);
});
p2.then(
(value) => {
console.log("ä¸ä¸ä¸ª Promise ç onFulfilled 彿°è¢«è°ç¨äº");
console.log(value); // è°ç¨ä¸ä¸ä¸ª
},
(reason) => {
console.log("ä¸ä¸ä¸ª Promise ç onRejected 彿°è¢«è°ç¨äº");
console.log(reason);
},
);
è§è æµè§å¨å
¼å®¹æ§ åè§
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