ホームページ > 記事 > ウェブフロントエンド > JavaScript_javascript スキルでのコールバック制御フローの使用の概要
JavaScript のいたるところで見られるコールバックは、プロセス制御にとって大惨事であり、欠点は明らかです。
1. 明示的なリターンがないと、冗長なプロセスとその結果生じるバグが発生しやすくなります。
2. コードが無限にネストされており、読みにくい。
上記の問題を解決および回避する方法について話しましょう。
最初の問題は、コールバックを使用するときによく return を使用することを忘れることです (ただし、JavaScript にコンパイルされると最終結果が自動的に収集されます)。が戻り値として使用されますが、この戻り値は必ずしも本来の意図を表すものではありません)。以下の例を見てください。
b = ->
console.log '私はコールバックです'
a('エラー', b)
このいわゆる「エラーファースト」コーディングスタイルでは、明らかに、エラーが発生したときにメソッド a の後続のコードが実行されることは望ましくありませんが、プロセス全体を行うために throw を使用することも望ましくないのです。ハング(たとえそれが起こっても、それは優雅でなければなりません)くそー)、そして、上記のコードはバグを生成します。
1 つの解決策は、if...else... を正直に書くことですが、私は次のアプローチを好みます:
b = ->
console.log '私はコールバックです'
a('エラー', b)
JavaScript 非同期メソッドの戻り値のほとんどは役に立たないため、ここでは return を使用してプロセス コントロールとして機能します。これは if...else... よりコードが少なくなりますが、より明確です。
2 番目の問題は母親の子宮内で引き起こされ、根絶するのは困難です。
コードをより組織化するためにいくつかのフロー制御モジュールを使用することは良い方法です。たとえば、async は、反復、ループ、およびいくつかの条件文を含む一連のインターフェイスを提供し、キューイングも含む優れたモジュールです。システム。次の例は、2 つの記述方法の長所と短所を示しています
first = (コールバック)->
console.log '私が最初の関数です'
コールバック()
2 番目 = (コールバック)->
console.log '私は 2 番目の関数です'
コールバック()
3 番目 = ()->
console.log '私は 3 番目の関数です'
最初 ->
2 番目 ->
三番目()
# 非同期を使用します
async = require('async')
async.waterfall [
まず、
2番目、
3番目
]、(えー)->
賢い人として、あなたはどちらを選びますか?