Baseline Widely available *
await
æ¼ç®åã¯ãããã¹ (Promise
) ãå¾
ã¡ãå±¥è¡å¤ãåå¾ããããã«ä½¿ç¨ãã¾ããéåæé¢æ°ã®ä¸ãã¾ãã¯ã¢ã¸ã¥ã¼ã«ã®æä¸ä½ã§ã®ã¿ä½¿ç¨ãããã¨ãã§ãã¾ãã
ãããã¹ã¾ã㯠thenable ãªãã¸ã§ã¯ãã®å±¥è¡å¤ãã¾ãã¯å¼ã thenable ã§ãªãå ´åã¯ãå¼èªèº«ã®å¤ã
ä¾å¤ãããã¹ã¾ã㯠thenable ãªãã¸ã§ã¯ããæå¦ãããå ´åãæå¦çç±ã®ä¾å¤ãçºçãã¾ãã
解説é常ãawait
㯠Promise
ã expression
ã¨ãã¦æ¸¡ãã¦ããããã¹ãã¢ã³ã©ããããããã«ä½¿ç¨ãã¾ããawait
ãç¨ããã¨ããããã¹ã決å®ï¼ã¤ã¾ããå±¥è¡ã¾ãã¯æå¦ï¼ãããã¾ã§ããã®å¨å²ã«ãã async
颿°ã®å®è¡ã䏿çã«åæ¢ããã¾ããå®è¡ãåéãããã¨ãawait
å¼ã®å¤ã¯å±¥è¡ããããããã¹ã®å¤ã«ãªãã¾ãã
ãããã¹ãæå¦ãããå ´åãawait
å¼ã¯æå¦ãããå¤ã§ä¾å¤ãçºçãã¾ããawait
å¼ãæ ¼ç´ãã颿°ã¯ãã¨ã©ã¼ã®ã¹ã¿ãã¯ãã¬ã¼ã¹ã«è¡¨ç¤ºããã¾ãããã以å¤ã®å ´åãæå¦ããããããã¹ãå¾
æ©ãããªãã£ãããããã«è¿ããããããã¨ãå¼ã³åºãå´ã®é¢æ°ã¯ã¹ã¿ãã¯ãã¬ã¼ã¹ã«ç¾ãã¾ããã
expression
㯠Promise.resolve()
ã¨åãããã«è§£æ±ºããã¾ãã常㫠ãã¤ãã£ãã® Promise
ã«å¤æãããå¾
ã¡åãããã¾ãããã expression
ã以ä¸ã®å ´åã
Promise
ï¼ãã㯠expression
ã Promise
ã¾ãã¯ãã®ãµãã¯ã©ã¹ã«å±ããã㤠expression.constructor === Promise
ã§ãããã¨ãæå³ãã¾ãï¼ã®å ´å: ãããã¹ã¯ then()
ãå¼ã³åºããã¨ãªããç´æ¥ä½¿ç¨ããããã¤ãã£ãã«å¾
ã¡åãããã¾ããPromise()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ããªãã¸ã§ã¯ãã® then()
ã¡ã½ãããå¼ã³åºãã¦ãresolve
ã³ã¼ã«ããã¯ã渡ããã¨ã§çæãã¾ããPromise
ãæ§ç¯ãã¦ä½¿ç¨ãã¾ããç¨ãããããã¹ãæ¢ã«å±¥è¡ãããå ´åã§ããéåæé¢æ°ã®å®è¡ã¯æ¬¡ã®ãã£ãã¯ã¾ã§ä¸æåæ¢ãã¾ãããã®éã«ãéåæé¢æ°ã®å¼ã³åºãå´ãå®è¡ãåéãã¾ããä¸è¨ã®ä¾ãã覧ãã ããã
await
ã¯éåæé¢æ°ãã¢ã¸ã¥ã¼ã«ã®å
é¨ã§ã®ã¿æå¹ã§ãããããèªä½ãéåæã§ããããã¹ãè¿ãã®ã§ãawait
å¼ã¯ã¡ã¤ã³ã¹ã¬ããããããã¯ãããã¨ã¯ãªããå®éã«çµæã«ä¾åããã³ã¼ããã¤ã¾ã await
å¼ã®å¾ã«å®è¡ãå»¶æããã ãã§ãã
Promise
ã await
å¼ã«æ¸¡ãããå ´åã Promise
ãå±¥è¡ããã¦å±¥è¡å¤ãè¿ãã®ãå¾
ã¡ã¾ãã
function resolveAfter2Seconds(x) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function f1() {
const x = await resolveAfter2Seconds(10);
console.log(x); // 10
}
f1();
Thenable ãªãã¸ã§ã¯ã
Thenable ãªãã¸ã§ã¯ã ã¯åæ§ã«å±¥è¡ããã¾ãã
async function f2() {
const thenable = {
then(resolve) {
resolve("resolved!");
},
};
console.log(await thenable); // "resolved!"
}
f2();
ããã¯åæ§ã«æå¦ããã¾ãã
async function f2() {
const thenable = {
then(_, reject) {
reject(new Error("rejected!"));
},
};
await thenable; // Throws Error: rejected!
}
f2();
ãããã¹ã¸ã®å¤æ
å¤ã Promise
ã§ãªãå ´åã await
ã¯å¤ã解決ããã Promise
ã«å¤æãããããå¾
ã¡ã¾ããå¾
ã¡åããå¤ã«é¢ãã¦ã¯ãå¼ã³åºãå¯è½ãª then
ããããã£ããªãéãããã®ã¢ã¤ãã³ãã£ãã£ã¯å¤ããã¾ããã
async function f3() {
const y = await 20;
console.log(y); // 20
const obj = {};
console.log((await obj) === obj); // true
}
f3();
æå¦ããããããã¹ã®å¦ç
Promise
ãæå¦ãããå ´åãæå¦ãããå¤ã§ä¾å¤ãçºçãã¾ãã
async function f4() {
try {
const z = await Promise.reject(new Error("rejected!"));
} catch (e) {
console.error(e); // Error: rejected!
}
}
f4();
ãããã¹ãå¾
ã¤åã« catch()
ãã³ãã©ã¼ãé£çµããã°ãtry
ãããã¯ãªãã§æå¦ããããããã¹ãå¦çãããã¨ãã§ãã¾ãã
const response = await promisedFunction().catch((err) => {
console.error(err);
return "default response";
});
// response ã¯ãããã¹ãæå¦ãããå ´åã"default response" ã«ãªãã¾ãã
ããã¯ãpromisedFunction()
ãåæçã«ã¨ã©ã¼ãçºçããããã¨ã¯ãªããå¸¸ã«æå¦ããããããã¹ãè¿ãã¨ããåæã§ä½ããã¦ãã¾ããããã¯ãé©åã«è¨è¨ããããããã¹ãã¼ã¹ã®é¢æ°ã®ã»ã¨ãã©ãããã§ãããéå¸¸ã¯æ¬¡ã®ããã«ãªãã¾ãã
function promisedFunction() {
// ã¨ã©ã¼ãçºçããå¯è½æ§ãæå°éã«ããããããããã¹ãå³åº§ã«è¿ã
return new Promise((resolve, reject) => {
// éåæã«ä½ããè¡ã
});
}
ããããpromisedFunction()
ãåæçã«ã¨ã©ã¼ãçºçããå ´åããã®ã¨ã©ã¼ã¯ catch()
ãã³ãã©ã¼ã«ãã£ã¦ææããã¾ããããã®å ´åãtry...catch
æãå¿
è¦ã«ãªãã¾ãã
await
ãã¼ã¯ã¼ãã¯ãã¢ã¸ã¥ã¼ã«ã®æä¸ä½ã¯åç¬ã§ï¼éåæé¢æ°ã®å¤ã§ï¼ä½¿ç¨ãããã¨ãã§ãã¾ããã¤ã¾ãã await
ã使ãåã¢ã¸ã¥ã¼ã«ãæã¤ã¢ã¸ã¥ã¼ã«ã¯ãåã¢ã¸ã¥ã¼ã«ãå®è¡ãããã®ãå¾
ã£ã¦ãããèªåèªèº«ãå®è¡ãããããã«ãªãã¾ããä»ã®åã¢ã¸ã¥ã¼ã«ã®èªã¿è¾¼ã¿ããããã¯ãããã¨ãªããå®è¡ãããã¨ãã§ãã¾ãã
以ä¸ã¯ã Fetch API ã使ç¨ãã export
æã®ä¸ã§ await ãæå®ããã¢ã¸ã¥ã¼ã«ã®ä¾ã§ãããããå«ããã¹ã¦ã®ã¢ã¸ã¥ã¼ã«ã¯ãã³ã¼ããå®è¡ããåã«èªã¿åãã解決ããã®ãå¾
ã¡ã¾ãã
// fetch request
const colors = fetch("../data/colors.json").then((response) => response.json());
export default await colors;
await ã®å¶å¾¡ããã¼ã®å½±é¿
ã³ã¼ãï¼éåæé¢æ°ã¾ãã¯ã¢ã¸ã¥ã¼ã«å
ï¼ã§ await
ã«åºä¼ãã¨ã await ã®å¯¾è±¡ã¨ãªãå¼ãå®è¡ããããã®å¼ã®å¤ã«ä¾åãããã¹ã¦ã®ã³ã¼ãã¯ä¸æåæ¢ããã¾ããå¶å¾¡ã¯é¢æ°ãçµäºããå¼ã³åºãå´ã«æ»ãã¾ããå¾
æ©ä¸ã®å¼ã®å¤ã解決ãããã¨ã䏿忢ããã³ã¼ããç¶ããå¥ã® ãã¤ã¯ãã¿ã¹ã¯ãã¹ã±ã¸ã¥ã¼ã«ããã¾ããããã¯ãå¾
æ©ä¸ã®å¤ããã§ã«è§£æ±ºæ¸ã¿ã®ãããã¹ã§ãã£ããããããã¹ã§ã¯ãªãã£ããããå ´åã§ãè¡ããã¾ããå®è¡ã¯ãã¹ã±ã¸ã¥ã¼ã«æ¸ã¿ã®ä»ã®ãã¹ã¦ã®ãã¤ã¯ãã¿ã¹ã¯ãå¦çãããã¾ã§ãç¾å¨ã®é¢æ°ã«æ»ãã¾ãããä¾ãã°ã次ã®ã³ã¼ããèãã¦ã¿ã¾ãããã
async function foo(name) {
console.log(name, "start");
console.log(name, "middle");
console.log(name, "end");
}
foo("First");
foo("Second");
// First start
// First middle
// First end
// Second start
// Second middle
// Second end
ãã®å ´åã颿° foo
ã¯ãawait
å¼ãå«ã¾ãã¦ããªãããã广ã¯åæçã§ãã 3 ã¤ã®æã¯åãå»ã¿ã§å®è¡ããã¾ãããããã£ã¦ã 2 ã¤ã®é¢æ°å¼ã³åºãã¯ããã¹ã¦ã®æãé çªã«å®è¡ãã¾ãããããã¹ã®å ´åããã®é¢æ°ã¯æ¬¡ã®ããã«è¡¨ããã¾ãã
function foo(name) {
return new Promise((resolve) => {
console.log(name, "start");
console.log(name, "middle");
console.log(name, "end");
resolve();
});
}
ããããawait
ã 1 ã¤ã§ãããã¨ããã®é¢æ°ã¯éåæã¨ãªãã以éã®æã®å®è¡ã¯æ¬¡ã®ãã£ãã¯ã¾ã§å»¶æããã¾ãã
async function foo(name) {
console.log(name, "start");
await console.log(name, "middle");
console.log(name, "end");
}
foo("First");
foo("Second");
// First start
// First middle
// Second start
// Second middle
// First end
// Second end
ããã¯æ¬¡ã®ãã®ã«ç¸å½ãã¾ãã
function foo(name) {
return new Promise((resolve) => {
console.log(name, "start");
resolve(console.log(name, "middle"));
}).then(() => {
console.log(name, "end");
});
}
ä½å㪠then()
ãã³ãã©ã¼ã¯ãéåææä½ãå¾
æ©ããªããããã³ã³ã¹ãã©ã¯ã¿ã¼ã«æ¸¡ãããå®è¡è
ã¨çµ±åãããã¨ãã§ãã¾ãããã ãããã®ãã³ãã©ã¼ãåå¨ããã¨ã foo
ãå¼ã³åºããããã³ã«ã³ã¼ãã 1 ã¤ã®ãã¤ã¯ãã¿ã¹ã¯ã«åå²ããã¾ãããããã®ãã¤ã¯ãã¿ã¹ã¯ã¯ãç¸äºã«çµ¡ã¿åã£ã¦ã¹ã±ã¸ã¥ã¼ã«ãããå®è¡ããã¾ããããã«ãããã³ã¼ãã®é度ãä½ä¸ããããä¸è¦ãªã¬ã¼ã¹ã³ã³ãã£ã·ã§ã³ãçºçãããããå¯è½æ§ãããã¾ãããããã£ã¦ã await
ã¯å¿
è¦ãªå ´åï¼ãããã¹ããã®å¤ã«ã©ããè§£é¤ããå ´åï¼ã«ã®ã¿ä½¿ç¨ãã¦ãã ããã
ãã¤ã¯ãã¿ã¹ã¯ã¯ããããã¹ã®è§£æ±ºã ãã§ãªãããã以å¤ã®ã¦ã§ã API ã«ãã£ã¦ãã¹ã±ã¸ã¥ã¼ã«ãããåãåªå
度ã§å®è¡ããã¾ãããã®ä¾ã§ã¯ã queueMicrotask()
ã使ç¨ãã¦ãå await
å¼ãæ¤åºãããã¨ãã«ãã¤ã¯ãã¿ã¹ã¯ãã¥ã¼ãã©ã®ããã«å¦çããããã示ãã¦ãã¾ãã
let i = 0;
queueMicrotask(function test() {
i++;
console.log("ãã¤ã¯ãã¿ã¹ã¯", i);
if (i < 3) {
queueMicrotask(test);
}
});
(async () => {
console.log("éåæé¢æ°éå§");
for (let i = 1; i < 3; i++) {
await null;
console.log("éåæé¢æ°åé", i);
}
await null;
console.log("éåæé¢æ°çµäº");
})();
queueMicrotask(() => {
console.log("éåæé¢æ°ã®å¼ã³åºãå¾ã® queueMicrotask()");
});
console.log("ã¹ã¯ãªããã®åæé¨åã®çµäº");
// ãã°åºå:
// éåæé¢æ°éå§
// ã¹ã¯ãªããã®åæé¨åã®çµäº
// ãã¤ã¯ãã¿ã¹ã¯ 1
// éåæé¢æ°åé 1
// éåæé¢æ°ã®å¼ã³åºãå¾ã® queueMicrotask()
// ãã¤ã¯ãã¿ã¹ã¯ 2
// éåæé¢æ°åé 2
// ãã¤ã¯ãã¿ã¹ã¯ 3
// éåæé¢æ°çµäº
ãã®ä¾ã§ã¯ãéåæé¢æ°ãåéãããåã«å¸¸ã« test()
颿°ãå¼ã³åºãããã®ã§ããããããã¹ã±ã¸ã¥ã¼ã«ãããã¤ã¯ãã¿ã¹ã¯ã¯å¸¸ã«çµ¡ã¿åãããã«å®è¡ããã¾ãã䏿¹ãawait
㨠queueMicrotask()
ã¯ã©ã¡ãããã¤ã¯ãã¿ã¹ã¯ãã¹ã±ã¸ã¥ã¼ã«ããã®ã§ãå®è¡é åºã¯å¸¸ã«ã¹ã±ã¸ã¥ã¼ãªã³ã°ã®é åºã«åºã¥ãã¾ãããã®ããã"queueMicrotask() after calling async function" ã®ãã°åºåã¯ãéåæé¢æ°ãæåã®æå»ã«åéããå¾ã«è¡ããã¾ãã
éåæé¢æ°ãããããã¹ãç´æ¥è¿ãå ´åãawait
ãçç¥ããããã¨ãããã¾ãã
async function noAwait() {
// Some actions...
return /* await */ lastAsyncTask();
}
ããããlastAsyncTask
ã«ã¦éåæã«ã¨ã©ã¼ãçºçããå ´åãèãã¦ã¿ã¾ãããã
async function lastAsyncTask() {
await null;
throw new Error("failed");
}
async function noAwait() {
return lastAsyncTask();
}
noAwait();
// Error: failed
// at lastAsyncTask
ã¹ã¿ãã¯ãã¬ã¼ã¹ã«ã¯ lastAsyncTask
ã ããç¾ãã¾ãããããã¯ãããã¹ã noAwait
ããæ¢ã«è¿ãããå¾ã«æå¦ãããããã§ããããæå³ããããã¹ã¯ noAwait
ã¨ç¡é¢ä¿ã¨è¨ãã¾ããã¹ã¿ãã¯ãã¬ã¼ã¹ãæ¹åããã«ã¯ãawait
ã使ç¨ãã¦ãããã¹ãã¢ã³ã©ããããä¾å¤ãç¾å¨ã®é¢æ°ã«ä½¿ç¨ãããããã«ãããã¨ãã§ãã¾ããä¾å¤ã¯ããã«æ°ããæå¦ããããããã¹ã«ã©ããããã¾ãããã¨ã©ã¼ä½æä¸ã«å¼ã³åºãå´ãã¹ã¿ãã¯ãã¬ã¼ã¹ã«ç¾ãã¾ãã
async function lastAsyncTask() {
await null;
throw new Error("failed");
}
async function withAwait() {
return await lastAsyncTask();
}
withAwait();
// Error: failed
// at lastAsyncTask
// at async withAwait
ä¸è¬çãªèªèã«åãã¦ã return await promise
ã¯ã仿§ã¨ã¨ã³ã¸ã³ããã¤ãã£ããããã¹ã®è§£æ±ºãæé©åããããã return promise
ã¨åç以ä¸ã®é度ã§ãã return promise
ã®é«éåã®ææ¡ããããV8 ã® async 颿°ã®æé©åã«ã¤ãã¦ãèªããã¨ãã§ãã¾ãããããã£ã¦ãã³ã¼ãã£ã³ã°ã¹ã¿ã¤ã«ä¸ã®çç±ããªãéãã return await
ãå¸¸ã«æ¨å¥¨ãã¾ãã
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