javascriptのPromiseについて考える
はじめに
javascriptプログラマーのみなさん、Promiseは得意でしょうか?
私は苦手です。
2024年現在のjsでは、一番の使いどころであるajaxにはasync/awaitを使えばいいので、あまり良くわかっていなくても困るケースも少ないと思います。
さて、Promiseの解説記事は既に大量にありますが、どれを何回見ても非常に難しいので私なりの切り口でも書いてみます。
※今回は分かりやすくするために、あえて多少語弊のある書き方をしています。イメージが伝わればと思います。
任意のタイミングでコードを止めたり再開したりできる。
「Promise 入門」とかで検索したら、たいてい非同期処理の話が出てくると思います。
非同期処理を同期処理として扱いたい場合に用いる。とか。
まあ、そうだと思いますが、その言い回しでわかります?
私なりの解釈ですと、Promiseオブジェクトの役割は以下を生成することだと思います。
・停止したコードを再開するためのコールバックメソッド(resolve,reject)
・再開後に発動する処理
resolveかrejectがどこかで発動したら止められた時が動き出します。
その時はPromise.thenやPromise.catchが動きます。
const samplePromise = () => {
return new Promise(
(resolve,reject) => {
// 止めた時間を再開するための処理。
resolve(); // ここで再生開始
// このコードブロック自体を関数にして持ち出すと任意のタイミングで再生できる
}
)
}
そして、コードを停止させるのがawaitであり、停止可能なコードブロックを作るのがasyncです。
普段、await を使って Ajax 通信ができるのは、
Ajax通信用の関数(例えば fetch や axios.get など)がPromiseを返すように作られているからです。
つまり、「通信が成功したら resolve、失敗したら reject を呼ぶ」といった処理が関数の内部で定義されているため、
呼び出し側では await をつけるだけで非同期処理の完了を待てるのです。
おわりに
いかがでしたか?
なんとなくイメージできたでしょうか?
この概念は難しいので、いろいろな記事や動画を複合的にみて理解していくのがいいと思います。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion