我正在使用bluebird promise library并尝试从MongoDb获取数据,问题是。然后,在我从db获取数据之前,promise的函数正在执行。这是我获取数据的代码。
function getCollection( collectionName ) {
var p = database.listCollections().toArray( function(err, collInfos) {
if ( err ) return null;
for (var i = 0; i <= collInfos.length; i++) {
console.log('getdata');
if ( collInfos[i].name === collectionName ) {
return collInfos[i];
}
if ( i === collInfos.length - 1 ) {
return null;
}
}
});
p = Promise.resolve( p ).bind( p ).then( function collection( res ) {
console.log(res,'res');
return res;
});
return p; }
当执行此代码时,我将使用&#39; res&#39;和&#39; getdata&#39;之后打印。
答案 0 :(得分:1)
只要您不通过回调,MongoDB方法就会返回承诺。由于您确实通过了p
,因此undefined
成为Promise.resolve
而function getCollection( collectionName ) {
return Promise.resolve(database.listCollections().toArray())
.then(function(collInfos) {
for (var i = 0; i <= collInfos.length; i++) {
console.log('getdata');
if ( collInfos[i].name === collectionName ) {
return collInfos[i];
}
}
return null;
}, function(err) {
return null;
})
.then( function collection( res ) {
console.log(res,'res');
return res;
});
}
并不知道该等待什么。相反,使用
double