#20.非同期プログラミング(2)
1995 ワード
ひどうきプログラミング
この文書では、JavaScriptで非同期タスクを処理する方法について説明します.
コールバック技術を紹介します.
まず,非同期タスクはsettimeoutで処理する.
console.log('1') // 동기
setTimeout(() => console.log('2'), 0) // 비동기
console.log('3') // 동기
setTimeout(() => console.log('4'), 0) // 비동기
// 실행 결과 = 1 3 2 4
次に、非同期タスクを処理するためにコールバックが必要な理由を見てみましょう.const moveLeft = () => {
setTimeout(() => console.log('left'), 10)
}
const moveRight = () => {
setTimeout(() => console.log('right'), 30)
}
上記の例は、キャラクタを移動するコードです.左へ10ミリ秒、右へ30ミリ秒かかります.
キャラクタ移動の動作は非同期です.
このコードを使用して、キャラクタを右、左、右、左の順に移動します.
moveRight()
moveLeft()
moveRight()
moveLeft()
// 실행 결과 : left, left, right, right
みんな予想していたはずです.そうすれば、私たちは予想通りに行動しません.以上のことから,非同期操作では実行順序が保証されないという問題がある.
この問題を解決するために現れたのがcallbackです.
では、callbackを適用して問題を解決しましょう.
const moveLeft = (cb) => {
setTimeout(() => {
console.log('left')
if(cb){
cb()
}
}, 10)
}
const moveRight = (cb) => {
setTimeout(() => {
console.log('right')
if(cb){
cb()
}
}, 30)
}
moveLeft,moveRightはcb(関数)をパラメータとして受け入れる.操作が完了した後にcallbackを呼び出すことで、非同期操作の順序を保証できます.
ここで、callbackが追加されたmoveLeftとmoveRightにキャラクタを移動します.
// 실행 코드
moveRight(function() {
moveLeft(function() {
moveRight(function() {
moveLeft()
})
})
})
// 실행 결과 : right, left, right, left
// 우리가 원하는 대로 동작하는 것을 확인할 수 있다.
このようにcallbackは、非同期動作の順序を保証するために使用される.しかし、コールバック技術には非常に深刻な問題がある.
それはコールバックが重なると可読性が悪いということです.
もちろん、今はそう思わないかもしれません.
左右左右左右に動くコードを書いてみましょう
もちろんarrow functionを使うとより簡潔になりますが、可読性が低下するのは事実です.
今日はこれで終わります.次の授業ではcallback hellの解決方法を紹介します.
Reference
この問題について(#20.非同期プログラミング(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@2lang/20.-비동기-프로그래밍2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol