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