私はこのようなnodejs Mongodbコードを持っています。私はグローバル配列にプッシュしようとしているすべての結果を返しますが、配列は1つだけの値が含まれています。どんな考え?配列.pushがpromise関数内で動作していません
var s = [];
var p = function(){
return new Promise(function(resolve, reject) {
MongoClient.connect(url, function (err, db) {
db.listCollections().forEach(function(collname) {
db.collection(collname.name).find().sort({ duration_in_seconds: 1 }).limit(1).toArray(
function(err, docs) {
assert.equal(null, err);
s.push(docs);
resolve();
});
});
});
});
}
p().then(function() {
console.log(s);
});
あなたがの範囲外の変数を参照することはできませんがこれらのヘルパーを使用して
p
は、すべての結果の配列のための約束権を得Promise.all
、それらをアレイ内の各コレクションのための約束を入れて、そして待ちますそのような約束。代わりに "内側"で作業してください。 [複製を読んで理解する](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –どうすればいいですか?私は@NeilLunnを約束するために新しいです – karthik006
@NeilLunnここでの問題は約束ではなく、それは 'forEach'ループです – Bergi