Baseline 2025
Newly available
Promise.try()
éææ¹æ³æ¥åä¸ä¸ªä»»æç±»åçåè°å½æ°ï¼æ 论å
¶æ¯åæ¥æå¼æ¥ï¼è¿åç»æææåºå¼å¸¸ï¼ï¼å¹¶å°å
¶ç»æå°è£
æä¸ä¸ª Promise
ã
Promise.try(func)
Promise.try(func, arg1)
Promise.try(func, arg1, arg2)
Promise.try(func, arg1, arg2, /* â¦, */ argN)
åæ°
func
arg1
ãarg2
ã...ãargN
ï¼åæ¥è°ç¨ç彿°ãå®å¯ä»¥åä»»ä½äºæ
ââè¦ä¹è¿åä¸ä¸ªå¼ãæåºä¸ä¸ªé误æè
è¿åä¸ä¸ª promiseãarg1
ãarg2
ãâ¦ãargN
func
çåæ°ãä¸ä¸ª Promise
ï¼å
¶ç¶æå¯ä»¥æ¯ï¼
func
忥å°è¿åä¸ä¸ªå¼ãfunc
忥尿åºä¸ä¸ªé误ãfunc
è¿åä¸ä¸ª promiseãä½ å¯è½æä¸ä¸ªæ¥ååè°å½æ°ç APIï¼è¿ä¸ªåè°å½æ°å¯è½æ¯åæ¥çï¼ä¹å¯è½æ¯å¼æ¥çãä½ å¸æå°ç»æå°è£
æä¸ä¸ª promiseï¼ç»ä¸å¤çãæç´æ¥çæ¹æ³å¯è½æ¯ Promise.resolve(func())
ãé®é¢æ¯ï¼å¦æ func()
忥尿åºä¸ä¸ªé误ï¼è¿ä¸ªé误ä¸ä¼è¢«æè·ï¼å¹¶åæä¸ä¸ªè¢«æç»ç promiseã
常è§çåæ³ï¼å°å½æ°è°ç¨ç»ææåä¸ºå·²å±¥è¡ææç»ç promiseï¼é常çèµ·æ¥æ¯è¿æ ·çï¼
new Promise((resolve) => resolve(func()));
ä½å¨è¿éï¼Promise.try()
æ´æç¨ï¼
对äºå
ç½®ç Promise()
æé 彿°ï¼å¦ææ§è¡å¨å½æ°æåºé误ï¼å®ä¼èªå¨æè·å¹¶å°å
¶è½¬æ¢ä¸ºæç»ç¶æï¼å æ¤è¿ä¸¤ç§æ¹æ³åºæ¬çåï¼åªæ¯ Promise.try()
æ´ç®æ´æè¯»ã
请注æï¼Promise.try()
ä¸ä¸é¢ä»£ç å¹¶ä¸å®å
¨çä»·ï¼å°½ç®¡å®ä»¬é常ç¸ä¼¼ï¼
Promise.resolve().then(func);
å®ä»¬çåºå«å¨äºï¼ä¼ å
¥ç» then()
çåè°æ»æ¯å¼æ¥è°ç¨çï¼è Promise()
æé 彿°çæ§è¡å¨å½æ°æ»æ¯åæ¥è°ç¨çãPromise.try()
ä¹ä¼åæ¥è°ç¨å½æ°ï¼å¹¶å°½å¯è½ç«å³è§£å³ promiseã
Promise.try()
ä¸ catch()
å finally()
ç»å使ç¨ï¼å¯ä»¥ç¨æ¥å¨å个é¾ä¸å¤ç忥å弿¥é误ï¼å¹¶ä½¿å¤ç promise é误çèµ·æ¥åå¤ç忥é误ã
类似 setTimeout()
ï¼Promise.try()
æ¥åé¢å¤çåæ°ï¼è¿äºåæ°å°ä¼ éç»åè°ãè¿æå³çï¼ä¸è¦è¿æ ·åï¼
Promise.try(() => func(arg1, arg2));
èå¯ä»¥è¿æ ·ï¼
Promise.try(func, arg1, arg2);
å®ä»¬æ¯çæçï¼ä½æ¯åè é¿å å建é¢å¤çéå å¹¶ä¸æçæ´é«ã
ç¤ºä¾ ä½¿ç¨ Promise.try()ä¸é¢çç¤ºä¾æ¥åä¸ä¸ªåè°å½æ°ï¼å°å ¶âæåâ为ä¸ä¸ª promiseï¼å¤çç»æï¼å¹¶è¿è¡ä¸äºé误å¤çï¼
function doSomething(action) {
return Promise.try(action)
.then((result) => console.log(result))
.catch((error) => console.error(error))
.finally(() => console.log("宿"));
}
doSomething(() => "忥çç»æ");
doSomething(() => {
throw new Error("忥çé误");
});
doSomething(async () => "弿¥çç»æ");
doSomething(async () => {
throw new Error("弿¥çé误");
});
ä½¿ç¨ async/await è¯æ³å®ç°çç¸åææç代ç å¦ä¸ï¼
async function doSomething(action) {
try {
const result = await action();
console.log(result);
} catch (error) {
console.error(error);
} finally {
console.log("Done");
}
}
å¨é Promise 对象çæé 彿°ä¸è°ç¨ try()
Promise.try()
æ¯ä¸ä¸ªéç¨çæ¹æ³ï¼å®å¯ä»¥å¨ä»»ä½å®ç°ä¸ Promise()
æé 彿°ç¸åç¾åçæé 彿°ä¸è¢«è°ç¨ã
以ä¸çä»£ç æ¯ Promise.try()
çä¸ä¸ªè¿ä¼¼å®ç°ï¼å°½ç®¡å®ä»ç¶ä¸è½è¢«ç¨ä½ polyfillï¼ï¼
Promise.try = function (func) {
return new this((resolve, reject) => {
try {
resolve(func());
} catch (error) {
reject(error);
}
});
};
ç±äº Promise.try()
çå®ç°æ¹å¼ï¼å³ try...catch
ï¼ï¼æä»¬å¯ä»¥å®å
¨å°å° Promise.try()
ç this
设置为任ä½èªå®ä¹çæé 彿°ï¼å¹¶ä¸å®æ°¸è¿ä¸ä¼åæ¥å°æåºé误ã
class NotPromise {
constructor(executor) {
// âresolveâ彿°åârejectâ彿°çè¡ä¸ºä¸åç promise å®å
¨ä¸åï¼
// ä½ Promise.try() åªæ¯è°ç¨ resolve
executor(
(value) => console.log("已解å³", value),
(reason) => console.log("å·²æç»", reason),
);
}
}
const p = Promise.try.call(NotPromise, () => "åå½");
// è¾åºï¼å·²è§£å³ åå½
const p2 = Promise.try.call(NotPromise, () => {
throw new Error("å¦å¯");
});
// è¾åºï¼å·²æç» Error: å¦å¯
ä¸ Promise()
ä¸åï¼NotPromise()
æé 彿°å¨è¿è¡æ§è¡å¨æé´ä¸ä¼ä¼é
å°å¤çå¼å¸¸ã尽管 throw
è¯å¥åå¨ï¼Promise.try()
ä»ç¶è½æè·å¼å¸¸å¹¶å°å
¶ä¼ éç» 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