Baseline Widely available *
await
ì°ì°ìë Promise
ê° ì´íë ëê¹ì§ ì´íë ê°ì ë°íë°ë ë° ì¬ì©ë©ëë¤. ì´ ì°ì°ìë ë¹ë기 í¨ì ë´ë¶ë 모ë ìµìë¨ ë¶ë¶ììë§ ì¬ì©í ì ììµëë¤.
expression
Promise
, thenable ê°ì²´ ëë ë기í ì ìë ê°.
íë¡ë¯¸ì¤ ëë thenable ê°ì²´ì ì´í ê°ì´ê±°ë, ííìì´ thenableì´ ìë ê²½ì° í´ë¹ ííìì ìì²´ ê°.
ìì¸íë¡ë¯¸ì¤ ëë thenable ê°ì²´ê° ê±°ë¶ëë©´, í´ë¹ ê±°ë¶ ì¬ì 를 ëì§ëë¤.
ì¤ëªawait
ë ì¼ë°ì ì¼ë¡ Promise
를 ííìì¼ë¡ ì ë¬íì¬ í´ë¹ íë¡ë¯¸ì¤ë¥¼ ì¸ë©íë ë° ì¬ì©ë©ëë¤. await
를 ì¬ì©íë©´ í´ë¹ íë¡ë¯¸ì¤ê° ì´í ëë ê±°ë¶ ì²ë¦¬ë ëê¹ì§ async
í¨ìì ì¤íì´ ì¼ì ì¤ë¨ë©ëë¤. íë¡ë¯¸ì¤ê° ì´íëë©´ ì¤íì´ ì¬ê°ëê³ , await
ííìì ê°ì ì´íë íë¡ë¯¸ì¤ ê°ì´ ë©ëë¤.
íë¡ë¯¸ì¤ê° ê±°ë¶ëë©´, await
ííìì ê±°ë¶ë ê°ì ëì§ëë¤. await
ííìì í¬í¨íë í¨ìë ì¤ë¥ì ì¤í í¸ë ì´ì¤ì íìë©ëë¤. ë°ë©´, ê±°ë¶ë íë¡ë¯¸ì¤ë¥¼ await íì§ ìê±°ë ì¦ì ë°ííë©´ í¸ì¶ í¨ìë ì¤í í¸ë ì´ì¤ì ëíëì§ ììµëë¤.
expression
ì Promise.resolve()
ì ëì¼í ë°©ìì¼ë¡ ì²ë¦¬ë©ëë¤. íì 기본 Promise
ë¡ ë³íí ë¤, ìì를 기ë¤ë¦½ëë¤. expression
ì ë¤ìê³¼ ê°ì ê°ì¼ ì ììµëë¤.
Promise
: expression
ì´ Promise
ëë íì í´ëì¤ì ìíê³ expression.constructor === Promise
ì´ë©´, í´ë¹ íë¡ë¯¸ì¤ë then()
ì í¸ì¶íì§ ìê³ ì§ì ì¬ì©ëì´ await ë©ëë¤.then()
ë©ìë를 í¸ì¶íë©´ì resolve
ì½ë°±ì í¸ì¶íë ì²ë¦¬ê¸°ë¥¼ ì ë¬íì¬, 기본 Promise()
ìì±ìë¡ ìë¡ì´ íë¡ë¯¸ì¤ë¥¼ 구ì±í©ëë¤.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 ê°ì²´ë ì¤ì Promise
ê°ì²´ì ëì¼í ë°©ìì¼ë¡ ì²ë¦¬ë©ëë¤.
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(30);
} catch (e) {
console.error(e); // 30
}
}
f4();
ê±°ë¶ë íë¡ë¯¸ì¤ë await í기 ì ì catch()
ì²ë¦¬ê¸°ë¥¼ ì²´ì´ë íì¬ try
ë¸ë¡ ìì´ ì²ë¦¬í ì ììµëë¤.
const response = await promisedFunction().catch((err) => {
console.error(err);
return "default response";
});
// íë¡ë¯¸ì¤ê° ê±°ë¶ëë©´ ìëµì "default response"ê° ë©ëë¤.
ì´ë promisedFunction()
ì´ ë기ì ì¼ë¡ ì¤ë¥ë¥¼ ëì§ì§ ìê³ , íì ê±°ë¶ë íë¡ë¯¸ì¤ë¥¼ ë°ííë¤ë ì ì ì 기ë°í©ëë¤. ëë¶ë¶ì ì ì íê² ì¤ê³ë íë¡ë¯¸ì¤ ê¸°ë° í¨ìë¤ì ì´ì ê°ì í¹ì±ì ê°ì§ë©°, ì¼ë°ì ì¼ë¡ ë¤ìê³¼ ê°ì ííë¡ ìì±ë©ëë¤.
function promisedFunction() {
// ì¤ë¥ê° ë°ìí ê°ë¥ì±ì ì¤ì´ê¸° ìí´ íë¡ë¯¸ì¤ë¥¼ ì¦ì ë°íí©ëë¤.
return new Promise((resolve, reject) => {
// ë¹ë기 ìì
ìí
});
}
íì§ë§, promisedFunction()
ì´ ë기ì ì¼ë¡ ì¤ë¥ë¥¼ ëì§ë ê²½ì°, catch()
ì²ë¦¬ê¸°ë¡ë ì¤ë¥ë¥¼ í¬ì°©í ì ììµëë¤. ì´ë¬í ê²½ì°ìë try...catch
ë¬¸ì´ íìí©ëë¤.
await
í¤ìëë ë¹ë기 í¨ì ì¸ë¶ì 모ëì ìµìììì ì¬ì©í ì ììµëë¤. ì´ë await
를 ì¬ì©íë íì 모ëì´ ìì ê²½ì°, í´ë¹ 모ëì´ ì¤íë기 ì ì íì 모ë ì¤íì 기ë¤ë¦¬ê² í¨ì ì미í©ëë¤. ì´ ê³¼ì ìì ë¤ë¥¸ íì 모ëì ë¡ë©ì ì°¨ë¨ëì§ ììµëë¤.
Fetch API를 ì¬ì©íê³ export
문 ë´ìì await를 ëª
ìí 모ëì ìì ì
ëë¤. ì´ ëª¨ëì ê°ì ¸ì¤ë ë¤ë¥¸ 모ëì ì´ë¤ ì½ëë ì¤íë기 ì ì í´ë¹ í¨ì¹ ì´íì 기ë¤ë¦½ëë¤.
// fetch ìì²
const colors = fetch("../data/colors.json").then((response) => response.json());
export default await colors;
awaitê° ì ì´ íë¦ì 미ì¹ë ìí¥
ë¹ë기 í¨ìë 모ëìì await
를 ë§ëë©´, í´ë¹ 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
ííì í¬í¨íì§ ì기 ë문ì ë기ì ì¼ë¡ ëìí©ëë¤. ì¸ ë¬¸ì¥ ëª¨ë ëì¼í í±ìì ëìí©ëë¤. ë°ë¼ì, ë í¨ì í¸ì¶ì 모ë 문ì¥ì ìì°¨ì ì¼ë¡ ì¤ííê² ë©ëë¤. íë¡ë¯¸ì¤ ê´ì ìì ë³´ë©´, ì´ í¨ìë ë¤ìê³¼ ê°ì´ ííí ì ììµëë¤.
function foo(name) {
return new Promise((resolve) => {
console.log(name, "start");
console.log(name, "middle");
console.log(name, "end");
resolve();
});
}
íì§ë§ await
ê° íëë¼ë í¬í¨ëë©´, í´ë¹ í¨ìë ë¹ëê¸°ê° ëë©° ì´í 문ì¥ë¤ì ì¤íì ë¤ì í±ì¼ë¡ ì°ê¸°ë©ëë¤.
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
를 í ë² í¸ì¶í ëë§ë¤ ì¶ê°ì ì¸ ë§ì´í¬ë¡íì¤í¬ê° ìì±ëì´ ì½ëê° ë¶í ë©ëë¤. ì´ë¬í ë§ì´í¬ë¡íì¤í¬ë ì½í ë°©ìì¼ë¡ ë±ë¡ëê³ ì¤íëì´, ì½ë ì§í ìë를 ëë¦¬ê² íê±°ë ë¶íìí ê²½ì ì¡°ê±´ì ì ë°í ì ììµëë¤. ë°ë¼ì await
ë ì¤ì§ íë¡ë¯¸ì¤ë¥¼ ê°ì¼ë¡ íì´ì¼ í ëìë§ ì¬ì©í´ì¼ í©ëë¤.
ë§ì´í¬ë¡íì¤í¬ë íë¡ë¯¸ì¤ê° í´ê²°ë ëë¿ë§ ìëë¼ ì¹ APIì ìí´ìë ë±ë¡ëë©°, 모ë ëì¼í ì°ì ììë¡ ì¤íë©ëë¤. ì´ë² ìì ìì queueMicrotask()
를 ì¬ì©íë©° ê° await
ííìì ë§ë¬ì ë ë§ì´í¬ë¡í
ì¤í¬ íê° ì´ë»ê² ì²ë¦¬ëëì§ ì¤ëª
í©ëë¤.
let i = 0;
queueMicrotask(function test() {
i++;
console.log("microtask", i);
if (i < 3) {
queueMicrotask(test);
}
});
(async () => {
console.log("async function start");
for (let i = 1; i < 3; i++) {
await null;
console.log("async function resume", i);
}
await null;
console.log("async function end");
})();
queueMicrotask(() => {
console.log("queueMicrotask() after calling async function");
});
console.log("script sync part end");
// Logs:
// async function start
// script sync part end
// microtask 1
// async function resume 1
// queueMicrotask() after calling async function
// microtask 2
// async function resume 2
// microtask 3
// async function end
ì´ë² ìì ìì, test()
í¨ìë íì ë¹ë기 í¨ìê° ì¬ê°ë기 ì ì í¸ì¶ëë¯ë¡, ì´ë¤ì´ ê°ê° ë±ë¡íë ë§ì´í¬ë¡íì¤í¬ë ì½í ìë ë°©ìì¼ë¡ ì¤íë©ëë¤. íí¸, await
ì queueMicrotask()
ë 모ë ë§ì´í¬ë¡íì¤í¬ì ë±ë¡ë기 ë문ì ì¤í ììë ë±ë¡ë ììì ë°ë¼ ê²°ì ë©ëë¤. ë¹ë기 í¨ìê° ì²ì ì¬ê°ë ì´íì "ë¹ë기 í¨ì를 í¸ì¶í ë¤ìì queueMicrotask()" ë¡ê·¸ê° ëìíë ì´ì ì
ëë¤.
ëëë¡, ë¹ë기 í¨ììì íë¡ë¯¸ì¤ê° ì§ì ë°íë ê²½ì° await
ë ìëµë기ë í©ëë¤.
async function noAwait() {
// ì¼ë¶ ëì ìí...
return /* await */ lastAsyncTask();
}
íì§ë§, lastAsyncTask
ê° ë¹ë기ì ì¼ë¡ ì¤ë¥ë¥¼ ëì§ë ê²½ì°ë ê³ ë ¤í´ë³´ì¸ì.
async function lastAsyncTask() {
await null;
throw new Error("failed");
}
async function noAwait() {
return lastAsyncTask();
}
noAwait();
// Error: failed
// at lastAsyncTask
noAwait
ìì íë¡ë¯¸ì¤ê° ì´ë¯¸ ë°íë ë¤ì ê±°ë¶ë기 ë문ì ì¤í í¸ë ì´ì¤ììë lastAsyncTask
ë§ ëíë©ëë¤. ì´ë¤ ì미ììë, ì´ íë¡ë¯¸ì¤ê° 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ì ë¹ë기 í¨ì ìµì íì ëí´ìë íì¸í´ë³¼ ì ììµëë¤. ì¤íì¼ìì ì´ì 를 ì ì¸íë©´, ëë¶ë¶ì ê²½ì° 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