2012-02-18 6 views
1

setTimeoutとqueue.pop()を使用していくつかのことをチェックし、何度も繰り返し実行する非同期関数があります。 いくつかのロジックがtrueになった後、キューにいくつかの要素が残っていても、関数を呼び出す必要はありません。ですから、次のような声明があります。Javascript async function:返すと先頭が短くなる

if (isWhatIneed(currentItem)) { 
    completed = true; 
    return; 
} 

私は探していたものを持っています。問題はそれ以来より多くのアイテムがキューに供給され、非同期的に実行され続けることです。

if (completed) { 
    console.log("already completed"); 
    return; 
} 

これは(特にキューから複数のアイテムをポップし、実行を継続しないように、さらに何をやってからの呼び出しのスタック内の各実行を防ぐ:だから私は、その関数の最上部に追加しましたこれに対処するには)。

私の質問は、私は複数の返信文espを使って読んだことです。機能の最上位では貧弱な練習です。しかし、この場合、これは別の方法がありますか?私はif(!completed){// ...}で私の関数の全身を包み込むことができますが、これは全身をくぼんでいるので私にも似ています。早いリターンはありません。

おかげで、

+4

ここで、関数の先頭にreturn文を置くことは貧弱な習慣であると読んだことはありますか?全身を包むよりもはるかに優れています。 –

+0

私はMDNからそれを読んだと思うかもしれません。コメントありがとう! :-) –

+0

私はJames 'opionionです。私はこれも聞いたことがあります。複数のリターンを持つのは悪いことですが、これはコードのパスを辿るのが難しくなるためですが、このような場合には、望ましいと思います。 –

答えて

1

特に例このタイプでは、複数のreturn文を使用することに問題はありません。

たとえば、returnは、その機能が成功したかどうか、または他のエラーメッセージであるかどうかを確認するだけの値にすることができます。

関数内に複数のreturnステートメントがある場合は速度に問題はなく、コードのパスに従うことについては問題はありませんが、ジャンプを使用しないのでこのメソッドに問題はありません。この関数は、他の行になかった場所を返します。 (複数のリターンを使わずに再帰的なバックトラッキングアルゴリズムを実装してください。実用的ではありません)。

したがって、心配のない複数のreturn文を使用することをお勧めします。

関連する問題