ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript_javascript スキルでのコールバック制御フローの使用の概要

JavaScript_javascript スキルでのコールバック制御フローの使用の概要

WBOY
WBOYオリジナル
2016-05-16 16:08:581439ブラウズ

JavaScript のいたるところで見られるコールバックは、プロセス制御にとって大惨事であり、欠点は明らかです。

1. 明示的なリターンがないと、冗長なプロセスとその結果生じるバグが発生しやすくなります。
2. コードが無限にネストされており、読みにくい。

上記の問題を解決および回避する方法について話しましょう。

最初の問題は、コールバックを使用するときによく return を使用することを忘れることです (ただし、JavaScript にコンパイルされると最終結果が自動的に収集されます)。が戻り値として使用されますが、この戻り値は必ずしも本来の意図を表すものではありません)。以下の例を見てください。

コードをコピーします コードは次のとおりです:

a = (エラー、コールバック)->
callback() if err?
console.log '会えるでしょう'

b = ->
console.log '私はコールバックです'

a('エラー', b)

このいわゆる「エラーファースト」コーディングスタイルでは、明らかに、エラーが発生したときにメソッド a の後続のコードが実行されることは望ましくありませんが、プロセス全体を行うために throw を使用することも望ましくないのです。ハング(たとえそれが起こっても、それは優雅でなければなりません)くそー)、そして、上記のコードはバグを生成します。

1 つの解決策は、if...else... を正直に書くことですが、私は次のアプローチを好みます:

コードをコピー コードは次のとおりです:

a = (エラー、コールバック)->
エラー?
の場合は callback() を返す console.log 'あなたには私が表示されません'

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番目
]、(えー)->

賢い人として、あなたはどちらを選びますか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。