async/awaitとは
Promiseをベースにした非同期のコードを簡単に処理するメソッド
asyncを使った時、使わない時
asyncを使うと、返り値をPromiseを使って表示させることになる。
・asyncを使わない時
constdoWork=()=>{}console.log(doWork())
↓
「undefined」が返ってくる
(まだdoWork関数は何も定義されていないため)
・asyncを使った時
//asyncを用いて実装constdoWork=async()=>{}console.log(doWork())
↓
「Promise{undefined}」が返ってくる
★asyncは常にPromiseを返す!!!
asyncを使うメリット
→「.then()」「.catch()」を用いて、成功時、失敗時の次の処理を記述することができる。
constdoWork=async()=>{//エラーの時のパターンを見たい場合//throw new Error('something wrong') をここに記入return"Hello World"}doWork().then((result)=>{console.log('result',result)}).catch((e)=>{console.log('e',e)})
↓
・処理成功した時
「result Hello World」と表示される
・エラー時
「e Error:something wrong」と表示される
awaitを用いた実装
awaitを用いると、複数の非同期処理を簡単に扱える
★awaitは常に、asyncファンクションの中でしか使えない
//非同期処理、add関数の定義constadd=(a,b)=>{//返り値をPromiseで実装returnnewPromise((resolve,reject)=>{setTimeout(()=>{if(a<0||b<0){returnreject('Number must be non-negative')}resolve(a+b)},2000)})}constdoWork=async()=>{constsum=awaitadd(1,99)//もしも「await add(1, -99)」ならば、次の処理に行く前にエラーを返すconstsum2=awaitadd(sum,50)constsum3=awaitadd(sum2,3)returnsum3//sumからsum3まで順番に実行される。ネストされず非同期処理を連続させられる}doWork().then((result)=>{console.log('result',result)}).catch((e)=>{console.log('e',e)})
awaitを使うメリット
①ネストさせずに非同期処理を連続で記述することができる
②非同期処理の連続の中で、エラーになったものが一つでもでたら、次の非同期処理に移らずに処理を終了してくれる
参考文献
「The complete Node.js Developer Course」
https://www.udemy.com/share/101WGiAEIedVpTTX4D/