【JavaScript】setTimeoutを用いた、非同期処理入門
【JavaScript】setTimeoutを用いた、非同期処理入門:
setTimeoutを用いて、非同期処理の処理順をまとめました。
コールバック -> Promise -> async/await の順に説明する。
基本構文
1秒後に
無名関数を用いて書く。
アロー演算子を用いて書く。
アロー演算子を用いて書く。(中括弧を省略)
非同期処理の処理順を確認する。
timeout時間
非同期処理が複数重なると、コールバック地獄に陥る。
Promise化すると、thenを用いたメソッドチェーンで処理を繋げられる。
Promiseとアロー演算子を用いた場合
async関数内で、Promise関数にawaitを用いると、同期的に処理できる。
async/await とアロー演算子を用いた場合
setTimeoutをPromise化した、sleep関数で書き直してみる。
非同期処理の処理順をまとめました。
async/await を用いることで、とても簡潔に書けます。
間違い・指摘等があればコメントお願いします。
概要
setTimeoutを用いて、非同期処理の処理順をまとめました。コールバック -> Promise -> async/await の順に説明する。
setTimeout
基本構文setTimeout('コールバック関数', 'タイムアウト時間')
hogeを出力する。function callback(){
console.log('hoge')
}
setTimeout(callback, 1000)
無名関数を用いて書く。
setTimeout(function(){ console.log('hoge') }, 1000)
setTimeout(() => { console.log('hoge') }, 1000)
setTimeout(() => console.log('hoge'), 1000)
処理順
非同期処理の処理順を確認する。console.log(1) setTimeout(() => console.log(2), 1000) console.log(3) // 1 -> 3 -> 2
timeout時間
0秒 でも、処理順は変わらない。console.log(1) setTimeout(() => console.log(2), 0) console.log(3) // 1 -> 3 -> 2
コールバック地獄
非同期処理が複数重なると、コールバック地獄に陥る。setTimeout(() => {
console.log(1)
setTimeout(() => {
console.log(2)
setTimeout(() => {
console.log(3)
}, 1000)
}, 1000)
}, 1000)
// 1 -> 2 -> 3
コールバック地獄の回避方法
Promise化すると、thenを用いたメソッドチェーンで処理を繋げられる。const promiseTimeout = new Promise(function(resolve) {
setTimeout(function() {
console.log(2)
resolve()
}, 1000)
})
console.log(1)
promiseTimeout.then(function() { console.log(3) })
// 1 -> 2 -> 3
const promiseTimeout = new Promise(resolve =>
setTimeout(() => {
console.log(2)
resolve()
}, 1000)
)
console.log(1)
promiseTimeout.then(() => console.log(3))
// 1 -> 2 -> 3
async関数内で、Promise関数にawaitを用いると、同期的に処理できる。
function promiseTimeout() {
return new Promise(function(resolve) {
setTimeout(function() {
console.log(2)
resolve()
}, 1000)
})
}
async function asyncFunc() {
console.log(1)
await promiseTimeout()
console.log(3)
}
asyncFunc()
// 1 -> 2 -> 3
const promiseTimeout = () =>
new Promise(resolve =>
setTimeout(() => {
console.log(2)
resolve()
}, 1000)
)
const asyncFunc = async () => {
console.log(1)
await promiseTimeout()
console.log(3)
}
asyncFunc()
// 1 -> 2 -> 3
setTimeoutをPromise化した、sleep関数で書き直してみる。
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms))
const asyncFunc = async () => {
await sleep(1000)
console.log(1)
await sleep(1000)
console.log(2)
await sleep(1000)
console.log(3)
}
asyncFunc()
// 1 -> 2 -> 3
まとめ
非同期処理の処理順をまとめました。async/await を用いることで、とても簡潔に書けます。
間違い・指摘等があればコメントお願いします。
コメント
コメントを投稿