2012-12-17 34 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