ストックドッグ

KatoTakahiro。金融系の会社で働くSEが株やPython、その他諸々について書いています。サービスも運営してます→http://fmbrain.work

Promiseとasyncによる非同期処理

非同期処理

javascriptで非同期処理をかくために勉強した内容をメモ。


Promiseの公式ドキュ
developer.mozilla.org


asyncの公式ドキュ
developer.mozilla.org


JavaScript Promiseの本
azu.github.io

Promise

promiseオブジェクトを定義し、そこに関数resolveとrejectを登録する。

関数成功時はresolveが返され、失敗時はrejectが返される、ようにコードを書く。


成功時、失敗時の次の実行したいことを.then()で書く。

.then()はいくらでもつなげて書くことができる。

function promise() {
 return new Promise(function(resolve, reject) {
     setTimeout(function() {
         console.log('root', 5)
         resolve(5)
     }, 1000)
 })
}

promise().then(function(value) {
 console.log('promise', value)
 return value + 5
}).then(function(value){
 console.log('promise', value)
}).catch(function(error) {
 console.log('error')
 return new Error('error')
})

async

非同期処理を行う関数として、async functionとして定義する。

asyncで定義すると返り値は、promiseオブジェクトになる。

そのため.then()の書き方はいっしょ。


ただ、.then()をチェーン式に書かなくていいようなawaitという関数が用意されている。

awaithは、promiseの解決まで処理を一時停止するため、awaitを複数書けば.then()と実質いっしょのコードになる。

async function wait() {
 try {
     const x = await promise()
     console.log('async', x)

     const y = x + 5
     console.log('async', y)

     return y

 } catch(e) {
     return new Error('error')
 }
}

wait().then(function(value) {
})