await
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2017.
await
연산자는 Promise
를 기다리기 위해 사용됩니다. 연산자는 async function
내부에서만 사용할 수 있습니다.
구문
[rv] = await expression;
expression
-
Promise
혹은 기다릴 어떤 값입니다. rv
설명
await
문은 Promise
가 fulfill되거나 reject
될 때까지 async
함수의 실행을 일시 정지하고, Promise
가 fulfill되면 async
함수를 일시 정지한 부분부터 실행합니다. 이때 await
문의 반환값은 Promise
에서 fulfill된 값이 됩니다.
만약 Promise
가 reject
되면, await
문은 reject
된 값을 throw
합니다.
await
연산자 다음에 나오는 문의 값이 Promise
가 아니면 해당 값을 resolved Promise로 변환시킵니다.
An await
can split execution flow, allowing the caller of the await
's function to resume execution before the deferred continuation of the await
's function. After the await
defers the continuation of its function, if this is the first await
executed by the function, immediate execution also continues by returning to the function's caller a pending Promise
for the completion of the await
's function and resuming execution of that caller.
예제
만약 Promise
가 await
에 넘겨지면, await
은 Promise
가 fulfill되기를 기다렸다가, 해당 값을 리턴합니다.
function resolveAfter2Seconds(x) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function f1() {
var x = await resolveAfter2Seconds(10);
console.log(x); // 10
}
f1();
Thenable objects
will be fulfilled just the same.
async function f2() {
const thenable = {
then: function (resolve, _reject) {
resolve("resolved!");
},
};
console.log(await thenable); // resolved!
}
f2();
만약 값이 Promise
가 아니라면, 해당 값은 resolve
된 Promise
로 변환되며 이를 기다립니다.
async function f2() {
var y = await 20;
console.log(y); // 20
}
f2();
만약 Promise
가 reject
되면, reject
된 값이 throw
됩니다.
async function f3() {
try {
var z = await Promise.reject(30);
} catch (e) {
console.log(e); // 30
}
}
f3();
try블럭 없이 rejected Promise
다루기
var response = await promisedFunction().catch((err) => {
console.error(err);
});
// response will be undefined if the promise is rejected
명세서
Specification |
---|
ECMAScript Language Specification # sec-async-function-definitions |
브라우저 호환성
BCD tables only load in the browser