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 回答