2014-01-09 57 views
1

本月我從Heroku收到一個賬單,這令我感到意外。幸運的是,這只是幾美元,但我認爲我的使用率並不高。我查了一下賬單,說我上個月使用了大約1000個小時。我簡單地感到困惑,因爲我的應用程序每小時運行幾秒鐘發送一些電子郵件,但後來我意識到這個過程並沒有終止。NodeJS回調:跟蹤數據庫調用,這樣我就可以終止進程

在註釋完我的代碼之後,我確定該進程不會退出,因爲我的貓鼬數據庫連接仍處於打開狀態。但是我有幾個嵌套的回調數據庫,然後用mailgun發送這些郵件,有時mailgun回調函數有自己的mailgun回調函數。我如何跟蹤這些數據並確保數據庫最終關閉?

回答

1

我問我的JS忍者朋友,他說要用semaphores。這聽起來令人生畏,但實際上非常容易。

npm install semaphore --save 

包頁面here。然後,我的每個數據庫調用,我這樣做:

sem.take(function() { 
    sem.leave(); 
    db.close(); 
}); 

我想我大概可以用更深入的瞭解:

sem.take(function() { 
    Object.find({key: value}, function() { 
    sem.leave(); // (I don't need the database anymore) 
    // tons of other code 
    }); 
}); 

然後,我在此之前確保所有代碼的運行發生了什麼事,但現在正在工作。