promise.then()在promise.resolve()之前执行

时间:2016-10-10 13:15:43

标签: node.js mongodb promise bluebird asynccallback

我正在使用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;之后打印。

1 个答案:

答案 0 :(得分:1)

只要您不通过回调,MongoDB方法就会返回承诺。由于您确实通过了p,因此undefined成为Promise.resolvefunction 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