1

我有三個數據庫,每個數據庫都有一個MongoDB中名爲'items'的集合,我想從node.js連接到這些集合。在開始連接之前,我獲得一個包含這些數據庫名稱的數組,然後使用async.map()爲每個數據庫創建連接。當執行最後一次回調時,所有連接都打開,但該進程似乎被阻止,不會繼續進行。以下是我的咖啡代碼。NodeJS中的MongoClient.connect阻塞:async.map()

fs = require 'fs' 
jf = require 'jsonfile' 
MongoClient = (require 'mongodb').MongoClient 
async = require 'async' 

getConfigFileName =() -> 
    process.argv[2] 

transformed = (err, transformed) -> 
    console.log transformed 

connectMongoDB = (dbEntry, callback) -> 
    MongoClient.connect "mongodb://localhost:12345/" + dbEntry.databaseName, (err, db) -> 
     if err 
      callback err, dbEntry 
     else 
      dbEntry.connection = db 
      callback null, dbEntry 

# Start Execution Here. 
configFileName = getConfigFileName() 

databases = jf.readFileSync configFileName 

async.map databases, connectMongoDB, transformed 

我相信阻塞發生是由於mongo客戶端,但我不確定該怎麼做來解決這個問題。

+1

你是什麼意思,它是「封鎖」?你在源代碼中調用'async.map()'後調用什麼都沒有被調用? – mscdex

+0

我期望在async.map和所有的回調被執行之後,程序將會退出並顯示上面的代碼。但實際發生的是數組打印到控制檯中的轉換函數,然後不退出(關閉程序我需要做ctrl-c)。如果我不清楚,請告訴我。 – apatrick

+1

這是預料之中的,因爲您現在已經打開網絡連接到您的mongo數據庫。如果你關閉它們,你會發現你的過程會自然退出。 – mscdex

回答

1

這是預料之中的,因爲你現在有開放的網絡連接到你的mongo數據庫。如果你關閉它們,你會發現你的過程會自然退出。