##async/awaitとは
Promiseをベースにした非同期のコードを簡単に処理するメソッド
##asyncを使った時、使わない時
asyncを使うと、返り値をPromiseを使って表示させることになる。
・asyncを使わない時
const doWork = () => { }
console.log(doWork())
↓
「undefined」が返ってくる
(まだdoWork関数は何も定義されていないため)
・asyncを使った時
//asyncを用いて実装
const doWork = async() => {}
console.log(doWork())
↓
「Promise{undefined}」が返ってくる
★asyncは常にPromiseを返す!!!
asyncを使うメリット
→「.then()」「.catch()」を用いて、成功時、失敗時の次の処理を記述することができる。const doWork = 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関数の定義
const add = (a, b) => {
//返り値をPromiseで実装
return new Promise ((resolve, reject) => {
setTimeout(() => {
if(a < 0 || b < 0){
return reject('Number must be non-negative')
}
resolve(a + b)
}, 2000)
})
}
const doWork = async() => {
const sum = await add(1, 99)//もしも「await add(1, -99)」ならば、次の処理に行く前にエラーを返す
const sum2 = await add(sum, 50)
const sum3 = await add(sum2, 3)
return sum3 //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/