私は、次のコード(つまり、期待どおりに動作しません)している: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」コレクションに保存されたドキュメントを返すことになっています。問題は、line 'return docs [0] ...'がapp.get(...)内の変数 'result'ではなく、col.find(コールバックを呼び出した関数)に戻ることです。
文書を「結果」変数に戻す方法を知っていますか?
素晴らしい答えです。ありがとう。約束どおり - あなたはbluebird.promisify(bluebirdjs.com/docs/api/promise.promisify.html)が良いと思いませんか? – CrazySynthax
イェップ、そうかもしれない。私はそれを使用していないので、私は経験に基づいてコメントすることはできません:)これをチェックしてください:http://softwareengineering.stackexchange.com/questions/278778/why-are-native-es6-promises-slower-and-more-memory-intensive-than-bluebird – Alex