Baseline Widely available
Promise
ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ã主ã«ã¾ã ãããã¹ã«å¯¾å¿ãã¦ããªã颿°ãã©ããããããã«ä½¿ç¨ãã¾ãã
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("foo");
}, 300);
});
promise1.then((value) => {
console.log(value);
// Expected output: "foo"
});
console.log(promise1);
// Expected output: [object Promise]
æ§æ
ã¡ã¢: Promise()
㯠new
ä»ãã§ãªãã¨æ§ç¯ã§ãã¾ãããnew
ãªãã§å¼ã³åºããã¨ãã㨠TypeError
ãçºçãã¾ãã
executor
ã³ã³ã¹ãã©ã¯ã¿ã¼ãå®è¡ãã颿° (function
) ã§ããããã¯ã弿°ã¨ã㦠resolveFunc
㨠rejectFunc
ã® 2 ã¤ã®é¢æ°ãåãåãã¾ããexecutor
ã§çºçããã¨ã©ã¼ã¯ãã¹ã¦ãããã¹ãæå¦ãããè¿å¤ã¯ç¡è¦ããã¾ããexecutor
ã®æå³ã¥ãã«ã¤ãã¦ã¯ä¸è¨ã§è©³ãã説æãã¾ãã
new
ã§å¼ã³åºãããã¨ãPromise
ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ãããã¹ãªãã¸ã§ã¯ããè¿ãã¾ãããã®ãããã¹ãªãã¸ã§ã¯ãã¯ã颿° resolveFunc
ã¾ã㯠rejectFunc
ã®ãããããå¼ã³åºãããã¨ãã解決æ¸ã¿ãã«ãªãã¾ãã resolveFunc
ãå¼ã³åºãã¦å¥ã®ãããã¹ãªãã¸ã§ã¯ãã弿°ã¨ãã¦æ¸¡ãã¨ãæåã®ãããã¹ã¯ã解決æ¸ã¿ãã¨ãªãã¾ãããã¾ã ãç¢ºå®æ¸ã¿ãã§ã¯ãªããã¨ã«æ³¨æãã¦ãã ããã詳ããã¯ãããã¹ã®è§£èª¬ãåç
§ãã¦ãã ããã
徿¥ï¼ãããã¹ä»¥åï¼ãéåæã¿ã¹ã¯ã¯ã³ã¼ã«ããã¯ã¨ãã¦è¨è¨ããã¦ãã¾ããã
readFile("./data.txt", (error, result) => {
// ãã®ã³ã¼ã«ããã¯ã¯ãæçµç㪠`error` ã¾ã㯠`result` ãå«ã
// ã¿ã¹ã¯ãå®äºããã¨ãã«å¼ã³åºããã¾ããçµæã«ä¾åããæä½ã¯ã
// ãã®ã³ã¼ã«ããã¯å
ã§å®ç¾©ããå¿
è¦ãããã¾ãã
});
// ããã«æ¸ãããã³ã¼ãã¯ã`readFile` ãªã¯ã¨ã¹ããçºçããã¨
// ããã«å®è¡ããã¾ãã ã³ã¼ã«ããã¯ãå¼ã°ããã®ãå¾
ããªãããã
// `readFile` ã¯ãéåæãã¨ãªãã¾ãã
ãããã¹ãæä¾ããã³ã¼ãã®èªã¿åããããã®åä¸ã¨è¨èªæ©è½ãæ´»ç¨ããããã«ãPromise()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã使ç¨ããã¨ãã³ã¼ã«ããã¯ãã¼ã¹ã® API ããããã¹ãã¼ã¹ã® API ã«å¤æãããã¨ãã§ãã¾ãã
ã¡ã¢: ã¿ã¹ã¯ããã§ã«ãããã¹ãã¼ã¹ã§ããå ´åãPromise()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ä¸è¦ã§ãããã
executor
ã¯ãã³ã¼ã«ããã¯ã®çµæããããã¹ã«çµã³ã¤ããã«ã¹ã¿ã ã³ã¼ãã§ããããã°ã©ãã¼ã§ããããªãã executor
ãæ¸ãã¾ãããã®ã·ã°ããã£ã¯æ¬¡ã®ããã«ãªãã¾ãã
function executor(resolveFunc, rejectFunc) {
// é常ãã³ã¼ã«ããã¯ãåãå
¥ããéåææä½ã
// ä¾ãã°ä¸è¨ã® `readFile` 颿°ã®ãããªãã®
}
resolveFunc
㨠rejectFunc
ã颿°ã§ãå®éã«ã¯å¥½ããªååãä»ãããã¨ãã§ãã¾ããå¼ã³åºãå½¢å¼ã¯åç´ã§ãåä¸ã®ä»»æã®åã®å¼æ°ãåãä»ãã¾ãã
resolveFunc(value); // 解決ããæã®å¼ã³åºã
rejectFunc(reason); // æå¦ããæã®å¼ã³åºã
resolveFunc
ã«æ¸¡ã value
弿°ã¯ãå¥ã®ãããã¹ãªãã¸ã§ã¯ãã«ãããã¨ãã§ãã¾ãããã®å ´åãæ°ãã«æ§ç¯ããããããã¹ã®ç¶æ
ã¯ã渡ããããããã¹ã«ãããã¯ã¤ã³ãããã¾ãï¼è§£æ±ºãããã¹ã®ä¸é¨ã¨ãã¦ï¼ãrejectFunc
ã¯ãthrow
æã«è¿ãæå³ãæã¡ã¾ãããã®ãããreason
ã¯é常ãError
ã¤ã³ã¹ã¿ã³ã¹ã§ããvalue
ã¾ã㯠reason
ã®ãããããçç¥ããã¨ããããã¹ã¯ undefined
ã§å±¥è¡/æå¦ããã¾ãã
executor
ã®å®äºç¶æ
ã¯ããããã¹ã®ç¶æ
ã«å¶éããã广ããæã¡ã¾ããã
executor
ã®è¿å¤ã¯ç¡è¦ããã¾ãã executor
å
ã® return
æã¯å¶å¾¡ããã¼ã«å½±é¿ãä¸ããã ãã§ã颿°ã®ä¸é¨ãå®è¡ããããã©ããã夿´ãã¾ããããããã¹ã®å±¥è¡å¤ã«ã¯å½±é¿ãä¸ãã¾ããã executor
ãçµäºããä»å¾ resolveFunc
ã¾ã㯠rejectFunc
ãå¼ã³åºããããã¨ãä¸å¯è½ãªå ´åï¼ä¾ãã°ãéåæã¿ã¹ã¯ãã¹ã±ã¸ã¥ã¼ã«ããã¦ããªãå ´åï¼ããããã¹ã¯æ°¸é ã«å¾
æ©ç¶æ
ã®ã¾ã¾ã¨ãªãã¾ããexecutor
ã§çºçããå ´åãresolveFunc
ã¾ã㯠rejectFunc
ããã§ã«å¼ã³åºããã¦ããªãéãããããã¹ã¯æå¦ããã¾ããã¡ã¢: å¾ æ©ä¸ã®ãããã¹ã®åå¨ã¯ãããã°ã©ã ã®çµäºã妨ãããã¨ã¯ããã¾ãããã¤ãã³ãã«ã¼ãã空ã®å ´åãå¾ æ©ä¸ã®ãããã¹ããã£ã¦ãããã°ã©ã ã¯çµäºãã¾ãï¼å¿ ãæ°¸é ã«å¾ æ©ä¸ã§ããããï¼ã
以ä¸ã«ãå ¸åçãªæµãã®æ¦è¦ã示ãã¾ãã
Promise
ãªãã¸ã§ã¯ããçæããæç¹ã«ããã¦ãresolveFunc
㨠rejectFunc
ã«å¯¾å¿ãã颿°ãã¢ãçæããã¾ããããã㯠Promise
ãªãã¸ã§ã¯ãã«ãçµã³ä»ããããã¾ããexecutor
ã¯é常ãã³ã¼ã«ããã¯ãã¼ã¹ã® API ãæå®ãããéåææä½ãã©ãããã¾ãã ã³ã¼ã«ããã¯ï¼å
ã®ã³ã¼ã«ããã¯ãã¼ã¹ã® API ã«æ¸¡ããã®ï¼ã¯ executor
ã³ã¼ãå
ã§å®ç¾©ããããããresolveFunc
㨠rejectFunc
ã«ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ããexecutor
ã¯ãresolveFunc
ããã³ rejectFunc
颿°ã弿°ã¨ãã¦ãåæçã«ï¼Promise
ãæ§ç¯ãããã¨ããã«ï¼å¼ã³åºããã¾ããexecutor
å
ã®ã³ã¼ãã«ã¯ãä½ããã®æä½ãå®è¡ããæ©ä¼ãããã¾ããéåæã¿ã¹ã¯ã®æçµçãªå®äºã¯ãresolveFunc
ã¾ãã¯rejectFunc
ã«ãã£ã¦çºçããä»éãã广ãéãã¦ããããã¹ã¤ã³ã¹ã¿ã³ã¹ã«éç¥ããã¾ãããã®ä»éãã广ã«ãããPromise
ãªãã¸ã§ã¯ããã解決æ¸ã¿ãã¨ãªãã¾ãã
resolveFunc
ãæåã«å¼ã³åºãããã¨ã渡ãããå¤ã解決ããã¾ãããããã¹ã¯ãå¾
æ©ç¶æ
ã®ã¾ã¾ã«ãªãå ´åï¼å¥ã® thenable ãæ¸¡ãããå ´åï¼ãå±¥è¡ãããå ´åï¼thenable ã§ã¯ãªãå¤ã渡ãããã»ã¨ãã©ã®å ´åï¼ãã¾ãã¯æå¦ãããå ´åï¼ä¸æ£ãªè§£æ±ºå¤ã®å ´åï¼ãããã¾ããrejectFunc
ãæåã®å¼ã³åºãããå ´åããããã¹ã¯å³åº§ã«æå¦ããã¾ããresolveFunc
ã¾ã㯠rejectFunc
ï¼ã®ãããããå¼ã³åºãããã¨ããããã¹ã¯è§£æ±ºãããç¶æ
ã«ãªãã¾ãã resolveFunc
ã¾ã㯠rejectFunc
ã®æåã®å¼ã³åºãã®ã¿ããããã¹ã®æçµçãªç¶æ
ã«å½±é¿ãããã®å¾ã®ããããã®é¢æ°ã¸ã®å¼ã³åºãã¯ãå±¥è¡å¤/æå¦çç±ã夿´ãããã¨ããæçµçãªç¶æ
ããå±¥è¡æ¸ã¿ããããæå¦æ¸ã¿ãã¾ãã¯ãã®å対ã«åãæ¿ãããã¨ãã§ãã¾ãããexecutor
ãã¨ã©ã¼ãçºçãã¦çµäºããå ´åããããã¹ã¯æå¦ããã¾ãããã ããè§£æ±ºé¢æ°ã®ããããããã§ã«å¼ã³åºããã¦ããå ´åï¼ãããã¹ããã§ã«è§£æ±ºããã¦ããå ´åï¼ããã®ã¨ã©ã¼ã¯ç¡è¦ããã¾ããthen()
, catch()
, finally()
ãéãã¦é¢é£ä»ãããããã³ãã©ã¼ãå¼ã³åºããã¾ããæçµçãªå±¥è¡å¤ã¾ãã¯æå¦çç±ã¯ãå±¥è¡ããã³æå¦ãã³ãã©ã¼ã®å¼ã³åºãã«å¼æ°ã¨ãã¦æ¸¡ããã¾ãï¼ãããã¹ã®é£éãåç
§ï¼ãä¾ãã°ãä¸è¨ã®ã³ã¼ã«ããã¯ãã¼ã¹ã® readFile
API ã¯ããããã¹ãã¼ã¹ã® API ã«å¤æãããã¨ãã§ãã¾ãã
const readFilePromise = (path) =>
new Promise((resolve, reject) => {
readFile(path, (error, result) => {
if (error) {
reject(error);
} else {
resolve(result);
}
});
});
readFilePromise("./data.txt")
.then((result) => console.log(result))
.catch((error) => console.error("Failed to read data"));
resolve
ã³ã¼ã«ããã¯ã¨ reject
ã³ã¼ã«ããã¯ã¯ãå®è¡é¢æ°ã®ã¹ã³ã¼ãå
ã§ã®ã¿å©ç¨ã§ããããããããã¹ãæ§ç¯ãããå¾ã«ãããã«ã¢ã¯ã»ã¹ãããã¨ã¯ã§ãã¾ããããããã¹ã®è§£æ±ºæ¹æ³ã決å®ããåã«ãããã¹ãæ§ç¯ãããå ´åã¯ã代ããã« Promise.withResolvers()
ã¡ã½ããã使ç¨ãããã¨ãã§ãã¾ãããã®ã¡ã½ããã¯ãresolve
㨠reject
ã®é¢æ°ãå
¬éãã¾ãã
resolve
颿°ã¯ã以ä¸ã®åä½ããã¾ãã
TypeError
ã§æå¦ããã¾ããthen
ããããã£ãå¼ã³åºããªããªãã¸ã§ã¯ãï¼ã§åä»ããããå ´åããããã¹ã¯å³åº§ã«ãã®å¤ã§å±¥è¡ããã¾ããPromise
ã¤ã³ã¹ã¿ã³ã¹ãå«ã¿ã¾ãï¼ã§å¼ã³åºãããå ´åãthenable ã® then
ã¡ã½ãããä¿åãããå°æ¥å¼ã³åºããã¾ãï¼å¸¸ã«éåæã§å¼ã³åºããã¾ãï¼ãthen
ã¡ã½ããã¯ã2 ã¤ã®ã³ã¼ã«ããã¯ã¨ã¨ãã«å¼ã³åºããã¾ãããã®ã³ã¼ã«ããã¯ã¯ãexecutor
颿°ã«æ¸¡ã resolveFunc
ããã³ rejectFunc
ã¨ã¾ã£ããåãåä½ããã 2 ã¤ã®æ°ãã颿°ã§ãã then
ã¡ã½ãããå¼ãã§ä¾å¤ãçºçããã¨ãç¾å¨ã®ãããã¹ã¯çºçããã¨ã©ã¼ã¨ã¨ãã«æå¦ããã¾ããæå¾ã®å ´åãããã¯æ¬¡ã®ãããªã³ã¼ããæå³ãã¦ãã¾ãã
new Promise((resolve, reject) => {
resolve(thenable);
});
Is roughly equivalent to:
new Promise((resolve, reject) => {
try {
thenable.then(
(value) => resolve(value),
(reason) => reject(reason),
);
} catch (e) {
reject(e);
}
});
ãã ããresolve(thenable)
ã®å ´åã¯ä¾å¤ã§ãã
resolve
ã¯åæçã«å¼ã³åºãããããããã¨ã anotherPromise.then()
ãéãã¦æ·»ä»ããããã³ãã©ã¼ãã¾ã å¼ã³åºããã¦ããªãå ´åã§ããresolve
ã¾ã㯠reject
ãå度å¼ã³åºãã¦ã广ã¯ããã¾ãããthen
ã¡ã½ããã¯éåæã§å¼ã³åºããããããthenable ãæ¸¡ããã¦ããããã¹ã¯å³åº§ã«è§£æ±ºããããã¨ã¯ããã¾ãããresolve
ã¯ãthenable.then()
ã value
ã¨ãã¦æ¸¡ããä½ããåã³å¼ã³åºãããããªã¾ã«ãã¼é¢æ°ã¯å
¥ãåã«ãªã£ã thenable ãå¹³å¦åãããã¨ãã§ãã¾ããã¤ã¾ããthenable ãå¥ã® thenable ãå¼ã³åºã㦠onFulfilled
ãã³ãã©ã¼ãå®è¡ãããããªå ´åã§ãããã®å¹æã«ãããå®éã®ãããã¹ã®å±¥è¡ãã³ãã©ã¼ã thenable ãå±¥è¡å¤ã¨ãã¦åãåããã¨ã¯æ±ºãã¦ããã¾ããã
ãããã¹æ©è½ãæå®ããã颿°ã«æãããã«ã¯ãé©åãªæç¹ã§ resolve
ããã³ reject
颿°ãå¼ãã§ãããã¹ãè¿ãã¾ãã
function myAsyncFunction(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.onload = () => resolve(xhr.responseText);
xhr.onerror = () => reject(xhr.statusText);
xhr.send();
});
}
resolveFunc ã®å¼ã³åºãã®å¹æ
resolveFunc
ãå¼ã³åºãã¨ãããã¹ã解決ãããããããã®å¾ resolveFunc
ã¾ã㯠rejectFunc
ãå度å¼ã³åºãã¦ã广ã¯ããã¾ããã ãã ãããããã¹ã¯å¾
æ©ä¸ãå±¥è¡æ¸ã¿ã¾ãã¯æå¦æ¸ã¿ã®ãããããã®ç¶æ
ãæã¤ãã¨ãããã¾ãã
ãã® pendingResolved
ãããã¹ã¯ã使ãããæç¹ã§è§£æ±ºããã¾ãããªããªããããã¯ãã§ã«å
é¨ãããã¹ã®æçµçãªç¶æ
ã¨ä¸è´ããããã«ãããã¯ã¤ã³ãããã¦ããããã§ãããå®è¡è
å
ã§å¾ãã resolveOuter
ã rejectOuter
ãå¼ã³åºããããã¨ã©ã¼ãçºçãã¦ããæçµçãªç¶æ
ã«ã¯ä½ã®å¹æãããã¾ãããããããå
é¨ãããã¹ã¯ 100 ããªç§å¾ã¾ã§å¾
æ©ç¶æ
ã§ãããããå¤é¨ãããã¹ãå¾
æ©ç¶æ
ã¨ãªãã¾ãã
const pendingResolved = new Promise((resolveOuter, rejectOuter) => {
resolveOuter(
new Promise((resolveInner) => {
setTimeout(() => {
resolveInner("inner");
}, 100);
}),
);
});
ãã® fulfilledResolved
ãããã¹ã¯ãããã解決ãããç¬éã«å±¥è¡ããã¾ãããªããªããããã¯thenable ã§ã¯ãªãå¤ã§è§£æ±ºãããããã§ããããããããã使ãããæç¹ã§ã¯ãã¾ã resolve
ã reject
ãå¼ã³åºããã¦ããªããããæªè§£æ±ºã®ç¶æ
ã§ããæªè§£æ±ºã®ãããã¹ã¯ãå¿
ãå¾
æ©ç¶æ
ã«ç½®ããã¾ãã
const fulfilledResolved = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("outer");
}, 100);
});
rejectFunc
ãå¼ã³åºãã¨ãæããã«ãããã¹ãæå¦ããã¾ããããããresolveFunc
ã³ã¼ã«ããã¯ãå¼ã³åºãããå ´åã§ãããããã¹ãå³åº§ã«æå¦ãããã«ã¯ã2 ã¤ã®æ¹æ³ãããã¾ãã
// 1. ãããã¹ãã®ãã®ã§è§£æ±º
const rejectedResolved1 = new Promise((resolve) => {
// ã¡ã¢: resolve ã¯éåæã§å¼ã³åºãããªããã°ãªããã
// rejectedResolved1夿°ãåæåããã
setTimeout(() => resolve(rejectedResolved1)); // TypeError: Chaining cycle detected for promise #<Promise>
});
// 2. `then` ããããã£ã«ã¢ã¯ã»ã¹ããã¨çºçãããªãã¸ã§ã¯ãã§è§£æ±º
const rejectedResolved2 = new Promise((resolve) => {
resolve({
get then() {
throw new Error("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