この記事では、JavaScriptのPromiseとawait
を使って処理を一時停止する方法について説明します。非同期処理を一時停止して、指定した時間が経過した後に再開する方法を見ていきます。
目次
Promiseの基本
Promiseは、JavaScriptで非同期処理を扱うためのオブジェクトです。Promiseは「pending」、「fulfilled」、または「rejected」のいずれかの状態を持ちます。Promiseが作成されると、「pending」の状態になり、その後処理が完了した場合には「fulfilled」に、エラーが発生した場合には「rejected」になります。
Promiseの解決や拒否は、resolve
関数とreject
関数を使って行われます。resolve
関数は、Promiseが正常に完了したことを示すために使用され、reject
関数は、エラーが発生したことを示すために使用されます。
処理を一時停止する方法
以下のコードは、Promiseを生成し、2秒後にそれを解決するように設定されています。await
キーワードを使用して、Promiseが解決されるまで非同期処理を一時停止しています。Promiseが解決されると、処理が再開されます。
await new Promise((resolve) => {
console.log('Waiting for 2 seconds...');
setTimeout(() => {
console.log('2 seconds passed. Resolving the promise now.');
resolve();
}, 2000);
});
このコードは、処理を2秒間一時停止する目的で使用されます。そのため、.then()
やawait
を使ってPromiseに対してさらに処理を追加する必要はありません。
ただし、このコードはasync
関数の中にあると仮定しています。await
キーワードは、async
関数の中でのみ使用できます。したがって、このコードはasync
関数内になければ機能しません。
then()を使った例
await
を使ってPromiseが解決されるのを待っている例ではありますが、then()
を使って同様のことを実現することもできます。以下にその例を示します。
new Promise((resolve) => {
console.log('Waiting for 2 seconds...');
setTimeout(() => {
console.log('2 seconds passed. Resolving the promise now.');
resolve();
}, 2000);
}).then(() => {
console.log('Promise has been resolved.');
});
このコードは、Promiseが解決されると.then()
の中のコールバック関数が実行されるように設定しています。この例では、Promiseが解決された後に「
Promise has been resolved.」というメッセージがコンソールに表示されます。ただし、この方法では処理が一時停止しないため、後続の処理が待機せずに実行されることになります。
まとめ
JavaScriptのPromiseとawait
を使って非同期処理を一時停止し、指定した時間が経過した後に再開する方法を学びました。これらの機能は、非同期処理を効果的に制御するために役立ちます。PromiseはJavaScriptで非同期処理を扱うための強力なツールであり、await
と組み合わせることでコードの可読性と理解しやすさを向上させることができます。