此問題出現在以下問題中:node.js: how to return a value of a callback function?Bluebird.Promisify - 如何創建一個承諾鏈正確?
我決定使用Bluebird.promisify編寫上一個問題中的代碼。這是我寫的:
var express = require('express')
var app = express()
var MongoClient = require('mongodb').MongoClient;
var db = require('./db.js')
var Promise = require('bluebird');
app.get('/', function(req, res){
var result = Promise.promisify(db.get_document);
result().then(function(doc) {
res.send(doc);
console.log("end");
});
});
app.listen(3000, function(req, res) {
console.log("Listening on port 3000");
});
function get_document() {
var connect = Promise.promisify(MongoClient.connect);
connect(url).then(function(err,db) {
var col = db.collection('myinterviews'); // !!! ERROR!!! 'db' undefined
return col.find().toArray
}).then(function (err, docs) {
db.close();
return docs[0].name;
});
};
行:
var col = db.collection('myinterviews');
提供錯誤消息:
"Unhandled rejection TypeError: Cannot read property 'collection' of undefined."
功能MongoClient.connect接受有兩個參數的回調函數,那麼,爲什麼'db'undefined?
我沒有看到MongoClient在任何地方定義,這可能是問題。 url定義在哪裏。 – anwerj
我複製代碼時錯過了。我編輯了原文。 – CrazySynthax
你甚至在哪裏調用'get_document'? – Bergi