Javascript - Promsise async await
参考:Promiseを使う
Promiseの例
const axios = require('axios')function hoge(msg) { return new Promise((resolve, reject) => { if(msg === 'hoge') resolve('page') reject('error') })}function page() { return new Promise((resolve, reject) => { axios.get('https://google.com') .then(res => resolve('hoge')) .catch(err => reject(err)) })}
(function() { new Promise(ok => ok(1)) .then(no => console.log(no)) .then(() => console.log(2))})()
page() .then(msg => hoge(msg)) .then(msg => console.log(msg)) .catch(err => console.log(err))結果
12pagepromiseはこんな感じで、同期的にしてくれます。thenthenとつなげていけます。
asyncとawait
ここに詳しく書いてありました。分かりやすいなー。
asyncを関数の宣言の前に付けると、その関数は必ずPromiseを返します。
awaitは、asyncがついた関数の中でだけ使えて、awaitを使うと、thenの表記を簡略化できて、超普通の同期的関数のように扱える。
async function fn() { return 100}fn().then(no => console.log(no))
async function hoge () { let result = await fn() console.log(result)}hoge()実行結果
100100sleep関数をつくる
参考サイトにあるsleep関数を作ってみます。
const sleep = (ms, result) => { return new Promise(resolve => { setTimeout(resolve(result), ms) })}sleep(5000).then(() => console.log('5 seconds'))sleep(5000, 200).then(no => console.log(no))
async function hoge () { await sleep(5000) console.log('after 5sec') let result = await sleep(1000, 'hoge!!') console.log(result)}
hoge()これnodeで実行できないというか、sleepしなかった。まあいいか。
$ node index.js5 seconds200after 5sechoge!!$ node --harmony-async-await indexnode: bad option: --harmony-async-await