...
async
/await
、一体何者...?
async function asyncHello() {
// 3秒待つPromise = 擬似的なwaitはこう書けます
await new Promise(resolve => {
window.setTimeout(() => {
resolve();
}, 3000);
});
// 3秒経ったらHelloを返します
return "Hello!";
}
console.log(asyncHello());
// 3秒後に"Hello!"と表示したい
いきなり実際のコード例を出してみました。が、思う通りには動きません。
実はasync
関数を呼び出したときに返ってくるのもまたPromiseです。
ということで、正しく書き換えると、
asyncHello().then(result => console.log(result));
となりますね。
async
関数はPromise
オブジェクトを返す、await
演算子は直後のPromiseオブジェクトがresolveされるのを待って結果を返すはたらきがあります。
async function asyncHello() {
return "Hello!";
}
asyncHello();
// ほぼ同じ
new Promise((resolve) => {
resolve("Hello!");
});
// rejectする場合
async function asyncHello() {
throw new Error("Hello!")
}
asyncHello();
// ほぼ同じ
new Promise((resolve) => {
reject(new Error("Hello!"));
// throw new Error("Hello!"); してもよい
});
なお、await
演算子の直後のPromiseオブジェクトがrejectされた場合は、エラーがthrow
されます。