Baseline Widely available
Promise.resolve()
éææ¹æ³ä»¥ç»å®å¼âè§£å³ï¼resolveï¼âä¸ä¸ª Promise
ãå¦æè¯¥å¼æ¬èº«å°±æ¯ä¸ä¸ª Promiseï¼é£ä¹è¯¥ Promise å°è¢«è¿åï¼å¦æè¯¥å¼æ¯ä¸ä¸ª thenable 对象ï¼Promise.resolve()
å°è°ç¨å
¶ then()
æ¹æ³åå
¶ä¸¤ä¸ªåè°å½æ°ï¼å¦åï¼è¿åç Promise å°ä¼ä»¥è¯¥å¼å
ç°ã
è¯¥å½æ°å°åµå¥çç±» Promise 对象ï¼ä¾å¦ï¼ä¸ä¸ªå°è¢«å ç°ä¸ºå¦ä¸ä¸ª Promise 对象ç Promise 对象ï¼å±å¹³ï¼è½¬å为å个 Promise 对象ï¼å ¶å ç°å¼ä¸ºä¸ä¸ªé thenable å¼ã
å°è¯ä¸ä¸const promise1 = Promise.resolve(123);
promise1.then((value) => {
console.log(value);
// Expected output: 123
});
è¯æ³ åæ°
value
è¦è¢«è¯¥ Promise
对象解å³çåæ°ãä¹å¯ä»¥æ¯ä¸ä¸ª Promise
对象æä¸ä¸ª thenable 对象ã
ä¸ä¸ªç±ç»å®å¼è§£å³ç Promise
ï¼æè
å¦æè¯¥å¼ä¸ºä¸ä¸ª Promise 对象ï¼åè¿å该对象ãç¨äºè§£å³ç Promise å¯ä»¥å¤äºå·²å
ç°ãå·²æç»æå¾
å®ç¶æä¸çä»»ä½ä¸ç§ãä¾å¦ï¼å¯¹ä¸ä¸ªå·²æç»ç Promise è¿è¡è°ç¨ä»å°è¿åä¸ä¸ªå·²æç»ç Promiseã
Promise.resolve()
æ¹æ³ç¨äºè§£å³ä¸ä¸ª Promiseï¼ä½è¿ä¸âå
ç°âï¼fulfillï¼æâæç»âï¼rejectï¼Promise 对象并ä¸ç¸åãæå
³æ¯è¯çå®ä¹ï¼è¯·åè§ Promise æè¿°ãç®èè¨ä¹ï¼Promise.resolve()
è¿åä¸ä¸ª Promise 对象ï¼å
¶æç»ç¶æåå³äºå¦ä¸ä¸ª Promise 对象ãthenable 对象æå
¶ä»å¼ã
夿³¨ï¼ 妿坹 value
表达å¼è¿è¡æ±å¼æ¶åæ¥æåºäºé误ï¼å该é误ä¸ä¼è¢« Promise.resolve()
æè·å¹¶å
è£
å¨å·²æç»ç Promise ä¸ã对äºè¿ç§æ
åµï¼è¯·èèä½¿ç¨ Promise.try(() => value)
ã
Promise.resolve()
æ¹æ³æ¯ä¸ä¸ªéç¨æ¹æ³ï¼æ¯æåç±»åï¼è¿æå³çå®å¯ä»¥å¨ Promise
çåç±»ä¸è°ç¨ï¼å¹¶ä¸ç»æä¼æ¯è¯¥å类类åç Promise 对象ã为æ¤ï¼åç±»çæé 彿°å¿
é¡»å®ç°ä¸ Promise()
æé 彿°ç¸åçç¾åï¼å³æ¥åä¸ä¸ª executor
彿°ï¼è¯¥å½æ°å¯ä»¥ç¨ resolve
å reject
åè°å½æ°ä½ä¸ºåæ°è¿è¡è°ç¨ã
Promise.resolve()
æ¹æ³ç¹æ®å¤çäºåç Promise
å®ä¾ã妿 value
å±äº Promise
æå
¶åç±»ï¼å¹¶ä¸ value.constructor === Promise
ï¼é£ä¹ Promise.resolve()
ç´æ¥è¿å value
ï¼èä¸ä¼å建ä¸ä¸ªæ°ç Promise
å®ä¾ãå¦åï¼Promise.resolve()
å®é
ä¸ç¸å½äº new Promise((resolve) => resolve(value))
çç®åå½¢å¼ã
å®é
ä¸ï¼å¤§é¨åè§£å³é»è¾æ¯ç± Promise()
æé 彿°ä¼ éç resolve
彿°å®ç°çï¼ç®åæ¦æ¬å¦ä¸ï¼
then
æ¹æ³åå¾å°çç¶æå°ä½ä¸ºè¿åç Promise 对象çç¶æãï¼ä½æ¯å 为åçç Promise ç´æ¥éè¿ Promise.resolve()
è°ç¨ï¼èä¸å建å°è£
å¯¹è±¡ï¼æä»¥ä¸ä¼å¨åç Promise ä¸è°ç¨ then
æ¹æ³ãï¼å¦æ resolve
彿°æ¥æ¶å°å¦ä¸ä¸ª thenable 对象ï¼åä¼å次è¿è¡è§£å³ï¼ä»¥ç¡®ä¿ Promise 对象çæç»å
ç°å¼æ°¸è¿ä¸ä¼æ¯ thenable 对象ãPromise.resolve("æå").then(
(value) => {
console.log(value); // "æå"
},
(reason) => {
// ä¸ä¼è¢«è°ç¨
},
);
resolve ä¸ä¸ªæ°ç»
const p = Promise.resolve([1, 2, 3]);
p.then((v) => {
console.log(v[0]); // 1
});
resolve å¦ä¸ä¸ª promise
Promise.resolve()
æ¹æ³ä¼éç¨å·²åå¨ç Promise
å®ä¾ã妿宿£å¨è§£å³ä¸ä¸ªåçç Promiseï¼å®å°è¿ååä¸ Promise å®ä¾ï¼èä¸ä¼å建ä¸ä¸ªå°è£
对象ã
const original = Promise.resolve(33);
const cast = Promise.resolve(original);
cast.then((value) => {
console.log(`å¼ï¼${value}`);
});
console.log(`original === cast ? ${original === cast}`);
// æé¡ºåºæå°ï¼
// original === cast ? true
// å¼ï¼33
æ¥å¿è¾åºé¡ºåºé¢ åå
¶å®æ¯ç±äºå¼æ¥å°è°ç¨ then
å¤çå¨ã请åè§ then()
åèææ¡£è·åæ´å¤ä¿¡æ¯ã
// Resolve ä¸ä¸ª thenable 对象
const p1 = Promise.resolve({
then(onFulfill, onReject) {
onFulfill("å·²å
ç°ï¼");
},
});
console.log(p1 instanceof Promise); // trueï¼thenable 对象被转æ¢ä¸ºä¸ä¸ª Promise 对象
p1.then(
(v) => {
console.log(v); // "å·²å
ç°ï¼"
},
(e) => {
// ä¸ä¼è¢«è°ç¨
},
);
// Thenable å¨åè°ä¹åæåºå¼å¸¸
// Promise 被æç»
const thenable = {
then(onFulfilled) {
throw new TypeError("æåºå¼å¸¸");
onFulfilled("Resolving");
},
};
const p2 = Promise.resolve(thenable);
p2.then(
(v) => {
// ä¸ä¼è¢«è°ç¨
},
(e) => {
console.error(e); // TypeError: æåºå¼å¸¸
},
);
// Thenable å¨åè° Promise 被解å³ä¹åæåºå¼å¸¸
const thenable = {
then(onFulfilled) {
onFulfilled("è§£å³");
throw new TypeError("Throwing");
},
};
const p3 = Promise.resolve(thenable);
p3.then(
(v) => {
console.log(v); // "è§£å³"
},
(e) => {
// ä¸ä¼è¢«è°ç¨
},
);
åµå¥ç thenable 对象å°è¢«â深度å±å¹³â为å个 Promise 对象ã
const thenable = {
then(onFulfilled, onRejected) {
onFulfilled({
// 该 thenable 对象å°å
ç°ä¸ºå¦ä¸ä¸ª thenable 对象
then(onFulfilled, onRejected) {
onFulfilled(42);
},
});
},
};
Promise.resolve(thenable).then((v) => {
console.log(v); // 42
});
è¦åï¼ ä¸è¦å¨ä¸ä¸ªè§£å³ä¸ºèªèº«ç thenable 对象ä¸è°ç¨ Promise.resolve()
ãè¿å°å¯¼è´æ ééå½ï¼å 为å®è¯å¾å±å¹³ä¸ä¸ªæ éåµå¥ç Promiseã
const thenable = {
then(onFulfilled, onRejected) {
onFulfilled(thenable);
},
};
Promise.resolve(thenable); // å°ä¼å¯¼è´æ ééå½ã
å¨é Promise æé 彿°ä¸è°ç¨ resolve()
Promise.resolve()
æ¯ä¸ä¸ªéç¨æ¹æ³ãå®å¯ä»¥å¨ä»»ä½å®ç°ä¸ Promise()
æé 彿°ç¸åç¾åçæé 彿°ä¸è°ç¨ãä¾å¦ï¼æä»¬å¯ä»¥å¨ä¸ä¸ªæé 彿°ä¸è°ç¨å®ï¼å¹¶å° console.log
ä½ä¸º resolve
åæ°ä¼ éï¼
class NotPromise {
constructor(executor) {
// âresolveâåârejectâ彿°çè¡ä¸ºä¸åç Promise å®å
¨ä¸åï¼ä½ `Promise.resolve()` æ¹æ³ä»¥ç¸åçæ¹å¼è°ç¨å®ä»¬ã
executor(
(value) => console.log("已解å³", value),
(reason) => console.log("å·²æç»", reason),
);
}
}
Promise.resolve.call(NotPromise, "foo"); // è¾åº "å·²è§£å³ foo"
å±å¹³åµå¥ç thenable 对象çè½åæ¯ç± Promise()
æé 彿°ç resolve
彿°å®ç°çï¼å æ¤å¦æä½ å¨å¦ä¸ä¸ªæé 彿°ä¸è°ç¨å®ï¼åµå¥ç thenable 对象å¯è½ä¸ä¼è¢«å±å¹³ï¼è¿åå³äºè¯¥æé 彿°å¦ä½å®ç°å
¶ resolve
彿°ã
const thenable = {
then(onFulfilled, onRejected) {
onFulfilled({
// 该 thenable 对象å°å
ç°ä¸ºå¦ä¸ä¸ª thenable 对象
then(onFulfilled, onRejected) {
onFulfilled(42);
},
});
},
};
Promise.resolve.call(NotPromise, thenable); // è¾åº "å·²å
ç° { then: [Function: then] }"
è§è æµè§å¨å
¼å®¹æ§ åè§
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