1

次の CoffeScript コードを含むクラスを作成しました。

class SomeClass
  # ...lots of other code...

  runner: ->
    process.nextTick =>
      if @some_condition
        @do_something_async()
      @runner()

それがすべきことは、真になるのを待つ@some_conditionことです。これは基本的に機能しますが、これらすべてを非常に迅速にループするため、大量のリソースが使用されます。どうすればこれを正しく行うことができますか?

4

2 に答える 2

2

イベントを使用して、条件と、それらの条件が満たされたときに実行する必要のあるコードを分離します。

パターンは次のとおりです。

  1. イベントをリッスンし、イベントが発生したときに実行されるリスナーを設定します

    eventEmitter.on("myEvent", function () {
        console.log("myEvent just happened");
    });
    
  2. コード内の何かが条件を真にする可能性がある場合は、それを確認し、それに応じてイベントを発生させます。

    doSomething();
    something++;
    if (something > max_something) {
        eventEmitter.emit("myEvent");
    }
    
于 2012-12-17T15:30:44.133 に答える
0

何かが真になるのを待つループを持つ代わりに、コールバック関数を作成し、それを長時間実行されている関数に渡し、プロセスが完了したらコールバックを呼び出します。

于 2012-12-17T15:05:21.627 に答える