1

나는 node.js에서 연결하고자하는 MongoDB에 'items'컬렉션이있는 각각 3 개의 데이터베이스를 가지고 있습니다. 연결을 시작하기 전에 이러한 데이터베이스의 이름을 포함하는 배열을 얻은 다음 async.map()을 사용하여 각 데이터베이스에 대한 연결을 만듭니다. 최종 콜백이 실행되면 모든 연결이 열려 있지만 프로세스가 차단 된 것으로 보이고 더 이상 진행되지 않습니다. 아래는 내 coffeescript 코드입니다.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 데이터베이스에 대한 네트워크 연결이 열려 있기 때문에 예상됩니다. 당신이 그들을 닫으면 당신은 당신의 과정이 자연스럽게 종료된다는 것을 발견해야합니다.