Node.js:Mongoose在异步循环中跳过更新指令

时间:2014-10-08 13:50:07

标签: javascript arrays node.js mongodb asynchronous

基于异步瀑布结构(带有Mongoose的MEAN系统),我启动了一系列操作。最后一个让我头疼。从表单中,我发布JSON数据以创建作者数据库,其中书籍也可以链接到他们的作者(而每个作者文档包含一个字段" bookids",这是一个书籍ObjectID的数组,因此参考到其他文件)。 这是代码:

async.waterfall([

            {...},

            //write references of books to newly created author document
            function(newBooks, newAuthor, callback){

                async.forEachSeries(Object.keys(newBooks), function (item, internalcallback){ 

                    Author.update({ _id: newAuthor._id}, { $push: { bookids: newBooks[item] }}, {safe : true}, function(err, update){
                        if(update){
                            console.log('bookId added: '+newBooks[item]);   
                            internalcallback(err);
                        }
                        if(err){
                            console.log(err);   
                        }
                    });

                }, function(err) {
                    if(err){
                        console.log(err);   
                    }
                    console.log('adding bookids to author done');
                    callback(null);
                });
            }

        ], function (err, result) {
            if(err){
                console.log(err);   
            }
            console.log('DONE!!!');
            res.send('200');
        });

newBooks是一组bookID。我的问题:循环永远不会将所有bookID从数组中可靠地保存(推送)到数据库中。如果数组包含一个条目,则不会创建任何书籍引用。如果它包含三个条目,则创建两个条目。我不确定,我是否遇到了异步回调问题(数据库还没有完成执行但代码仍在继续,并且不等待回调)或者我是否只是缺少其他东西。 我想,代码是异步证明的,但显然它不是!? 有什么建议? 干杯伊戈尔

0 个答案:

没有答案