我有下面的代碼(不按預期工作):node.js:如何返回一個回調函數的值?
var express = require('express')
var app = express()
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/interviews';
app.get('/', function(req, res){
var result = get_document(res);
res.send(result // show the results of get document in the browser //)
console.log("end");
});
app.listen(3000, function(req, res) {
console.log("Listening on port 3000");
});
function get_document() {
MongoClient.connect(url, function(err, db) {
var col = db.collection('myinterviews');
var data = col.find().toArray(function(err, docs) {
db.close();
return docs[0].name.toString(); // returns to the function that calls the callback
});
});
}
函數「get_document」應該返回存儲在「myinterviews」收集的文件。問題是,'return docs [0] ...'這一行返回給col.find(這是調用回調的函數),而不是app.get(...)中的變量'result'。
你知道如何讓文件返回'result'變量嗎?
很好的答案。謝謝。至於承諾 - 你不覺得bluebird.promisify(bluebirdjs.com/docs/api/promise.promisify.html)更好嗎? – CrazySynthax
Yeap,它可能是。我沒有使用它,所以我不能根據經驗評論:)。看看這個:http://softwareengineering.stackexchange.com/questions/278778/why-are-native-es6-promises-slower-and-more-memory-intensive-than-bluebird – Alex