3
3

More than 3 years have passed since last update.

async/awaitを使った非同期処理

Posted at

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/

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3