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 클라이언트로 인해 발생한다고 생각하지만이 문제를 해결하기 위해 무엇을해야할지 확신 할 수 없습니다.
"차단"이란 무엇을 의미합니까? 소스 코드에서'async.map()'호출 후에 아무 것도 호출되지 않는다고 말하는 것입니까? – mscdex
async.map과 모든 콜백이 실행 된 후 프로그램은 위에 게시 된 코드로 종료 될 것이라고 예상합니다. 하지만 실제로 일어나는 일은 배열이 변형 된 함수로 콘솔에 출력 된 다음 종료되지 않는 것입니다 (프로그램을 닫으려면 Ctrl-C를 수행해야합니다). 내가 명확하지 않은 경우 알려주십시오. – apatrick
mongo 데이터베이스에 대한 네트워크 연결이 열려 있으므로 예상대로입니다. 당신이 그들을 닫으면 당신은 당신의 과정이 자연스럽게 종료된다는 것을 발견해야합니다. – mscdex