簡體   English   中英

如何確保對mongodb的node.js調用確實是異步的

[英]how to make sure that the node.js calls to mongodb are really asynchronous

我正在嘗試編寫一個node.js應用程序,我們需要在生產環境中部署它。

我們需要確保當存在任何長時間運行的進程/操作(例如查詢或數據庫服務器訪問)時,node.js不會掛起。

因此,我正在嘗試調用mongo或文件系統,這需要很長時間才能完成,這樣我就可以驗證其他node.js服務器在發生該請求時是否可以自由處理任何其他請求。

可悲的是,我無法插入一條記錄,而mongo確實需要很長時間才能完成該記錄或對文件系統進行同步調用。

有人可以告訴我該怎么做嗎?

謝謝

圖科

技巧是在執行調用的塊之后在控制台上記錄數據,並在回調中創建console.log(如果首先在控制台中終止,則消息實際上是異步的)

我使用mongojs作為mongo的驅動程序:

collection.find({}, function(err, res) {
    console.log("done")
});
console.log("sendign signal")

如果它是異步的,則在控制台中:

sendign signal
done! 

現在,對於鏈接的行為,您可以進行如下操作

dbChain = (function() {
  var chain = [], cursor = 0, busy = false;

  chainin = {
    push : function(aFn) {
      if(!busy) {
        chainin.reset();
        aFn();
        busy = true;
      } else {
        chain.push(aFn)
      }
    },

    next : function() {
      cursor++;
      if(chain[cursor]) {
        chain[cursor]();
      } else {
        chainin.reset();
      }

    },

    reset : function() {
      chain = [];
      cursor = 0;
      busy = false;
    }
  }

  return chainin;

})()

並且,在所有數據庫調用中,您都必須執行以下操作:

dbChain.push(...(a function ) ...)

在所有回調中

dbChain.next()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM