→
プロミス(Promise)を待つために使用します。
通常の JavaScript コードで、async function の内部でのみ使用することができます。よって Promise が返されるのを待機するために使用します。
| rv | プロミスの履行された値、または Promise ではない場合はその値自体を返します。 |
|---|---|
| expression | 待つ Promise もしくは何らかの値。 |
await 式は async 関数の実行を一時停止し、Promise が決定される(すなわち履行または拒否される)まで待ち、履行された後に async 関数の実行を再開します。最下位時に、await 式の値は履行された Promise の値になります。
Promise が拒否された場合、await 式は拒否された値で例外を発生させます。
await 演算子に続く式の値が Promise ではなかった場合、解決された Promise に変換されます。
await は実行フローを分割するため、非同期関数の呼び出し元が実行を再開することができます。await がその非同期関数の継続を延期した後は、後続の文が実行されます。この await がその関数で実行される最後の式である場合、実行は継続され、await の関数の完了を保留していた Promise を呼び出し元に返し、その呼び出し元での実行を再開します。
Promise が await 式に渡された場合、Promise が履行されて履行値を返すのを待ちます。
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function f1() {
var x = await resolveAfter2Seconds(10);
alert(x); // 10
}
D=f1(); //=[object Promise]
は同様に履行されます。
async function f2() {
const thenable = {
then: function(resolve, _reject) {
resolve('resolved!')
}
};
alert(await thenable); //表示:resolved!
}
D=f2(); //=[object Promise]
値が Promise でない場合は、値を解決済みの Promise に変換して待ちます。
async function f3() {
var y = await 20;
alert(y); //表示:20
}
D=f3(); //=[object Promise]
Promise が拒否された場合、拒否された値で例外が発生します。
async function f4() {
try {
var z = await Promise.reject(30);
} catch(e) {
alert(e); //表示:30
}
}
D=f4(); //=[object Promise]
拒否された Promise は try ブロックなしで処理することができます。
var response = await promisedFunction().catch((err) => { alert(err); });
// プロミスが拒否された場合、応答は undefined になります
¶省く