오기 - Node.js: 몽고DB와 약속 사용




nodejs mongodb restapi (2)

간단한 node.js 애플리케이션에서 Q Promise 패키지를 사용하기 시작했습니다. 그래서 모든 약속 시퀀스가 ​​완료된 후 어떻게 db 연결을 닫을 수 있는지에 관심이 있습니다.

예:

var toDbConnectionString = function(dbSettings) {
    return "mongodb://" +
        dbSettings.user + ":" +
        dbSettings.password + "@" +
        dbSettings.url;
};

var connectionString = toDbConnectionString(dbSettings);

Q.nfcall(
    MongoClient.connect,
    toDbConnectionString(dbSettings))
.then(function(db) {
    return Q.ninvoke(db, "collectionNames");
})
.then(function(collections) {
    console.log(collections);
})
.catch(function() {
    console.log(arguments);
});

컬렉션 이름을 표시 한 후 연결을 닫고 싶지만이 익명 함수에는 db 컨텍스트가 없습니다.

약속 패턴으로 이러한 사례를 처리하는 방법이 있습니까?

https://code.i-harness.com


당신이 둥지를 틀고 싶지 않다면 (나는 확실히하지 않습니다 ...) 그렇게하면됩니다.

var toDbConnectionString = function(dbSettings) {
    return "mongodb://" +
        dbSettings.user + ":" +
        dbSettings.password + "@" +
        dbSettings.url;
};

var connectionString = toDbConnectionString(dbSettings);
var db;

Q.nfcall(
    MongoClient.connect,
    toDbConnectionString(dbSettings))
.then(function(_db) {
    db = _db;
    return Q.ninvoke(db, "collectionNames");
})
.then(function(collections) {
    console.log(collections);
})
.catch(function() {
    console.log(arguments);
})
.finally(function() {
    if (db) db.close();
});

임의로 콜백을 중첩 할 수 있습니다. 그것은 운명의 피라미드에 가까워지고 있습니다, 그렇습니다. 그러나 그것은 논증을 범위 내에서 유지하는 유일한 방법입니다. 귀하의 경우 :

Q.nfcall(
    MongoClient.connect,
    toDbConnectionString(dbSettings))
.then(function(db) {
    return Q.ninvoke(db, "collectionNames")
    .then(function(collections) {
        console.log(collections);
    }).finally(function() {
        db.close();
    });
})
.catch(console.log.bind(console));

그러나 일반적으로 연결하거나 닫지 않는 경우가 많습니다 .







promise