2012-12-17 36 views
1

满足我写了一个类cotaining以下CoffeScript代码:等待一个条件在node.js中

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

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

什么是应该做的是等待@some_condition是真实的。这基本上起作用,但是因为它真的很快地循环遍历所有这些,它会导致大量的资源使用。我会如何正确地做到这一点?

+2

查找条件的回调。 – SLaks

回答

2

使用events来解耦当条件满足时必须运行的条件和代码。

模式是:

  1. 监听事件,并设置将在事件被触发

    eventEmitter.on("myEvent", function() { 
        console.log("myEvent just happened"); 
    }); 
    
  2. 当事情在你的代码可以让你的条件成为真正运行的监听器,检查它并相应地发起一个事件:

    doSomething(); 
    something++; 
    if (something > max_something) { 
        eventEmitter.emit("myEvent"); 
    } 
    
0

而不是有一个等待某些事情成为真实的循环,只需制作一个回调函数并将其传递给长时间运行的函数,并在完成该过程时调用回调函数。

+0

如果我为http请求设置了一个限制,并且条件如currentrequests> maxrequests – user1680104

+0

那怎么办?这不是你问的。 – Neal