蓝鸟承诺:循环猫鼬结果

时间:2016-02-22 23:14:36

标签: node.js mongoose bluebird

我通过Mongoose(MEAN环境)从MongoDB查询作者数据。作者数据还包含作者撰写的一系列书籍( - > results.books)。一旦收到,我想迭代这些书籍并检查某些值。到目前为止,这是我的代码。

return Author.findOne({_id: req.user._id}, '-username').execAsync()
.then(function(results) {

return Promise.each(results.books) //this line causes TypeError rejection
}).then(function(book){     
   console.log('book:'+book); // test output
   if(book==='whatever‘){
      //do foo
   }  
}).catch(function(err){
    console.log('Error: '+err);
});

不幸的是我不能让它工作,因为它一直给我一个拒绝TypeError上面标记的行。我试图在这里应用这个解决方案(Bluebird Promisfy.each, with for-loops and if-statements?),但它不会工作,因为它似乎也是一个不同类型的问题。

1 个答案:

答案 0 :(得分:1)

Bluebird的Promise.each()接受一个可迭代的AND迭代器回调函数,该函数将为iterable中的每个项调用。您没有传递回调函数。完成整个迭代后调用.then()之后的Promise.each()处理程序。看起来你期望它成为迭代器 - 事实并非如此。

Promise.each()的蓝鸟文档是here

我不确定你想要完成什么,但也许这就是你想要的:

return Author.findOne({_id: req.user._id}, 'username').execAsync()
   .then(function (results) {
        return Promise.each(results.books, function(book) {
            console.log('book:' + book); // test output
            if (book === 'whatever‘) {
               //do foo
            }
        });
    }).then(function() {
        // Promise.each() is done here
    }).catch(function (err) {
        console.log('Error: ' + err);
    });