2017-07-26 98 views
0

我有這個事件監聽器:處理事件。逐個。 Node.js的

manager.on('newOffer', (offer) => { 
console.log(`We have a new offer :#${offer.id}`.bgGreen); 
getInventory(function(){ 
processTradeOffer(offer);});}); 

我的問題時,許多 'newOffers' 出現出生。他們無法正確處理,因爲該程序首先在沒有流程的情況下觸發'newOffers'。

我需要什麼(在我看來):當出現'newOffer'時,關閉事件監聽器,完成功能,然後重新打開。那可能嗎?

+0

關閉監聽器意味着同時發出的任何事件都會丟失,那是您想要的嗎? – robertklep

+0

'processTradeOffer'(最有可能)正在異步執行,導致它在另一個進程中被調用,而下一個報價已被加載 – Luca

+0

@robertklep不,絕對不是。但它不會發生,因爲Iam使用cookie來防止這種情況發生。 –

回答

0

聽起來像你需要一個隊列爲1的併發性,一些async.queue()可以提供:

const handler = (offer, done) => { 
    console.log(`We have a new offer :#${offer.id}`.bgGreen); 
    getInventory(() => { 
    processTradeOffer(offer); // NB: if this is async, pass a callback that calls `done` 
    done(); 
    }); 
}; 

const queue = require('async').queue(handler, 1); 

... 

// Add a new offer to the queue: 
let offer = new Offer(); // or however you create `offer` objects 
queue.push(offer); 

(然而,這可能成爲一個瓶頸,如果你不能處理提供足夠快,在哪種情況下您可能需要重新考慮如何處理優惠)

+0

謝謝!經過幾分鐘的工作。我想我已經得到了你的感謝。 –