【发布时间】:2014-06-21 21:31:10
【问题描述】:
第一次发帖,如有错误请见谅……
我正在创建一些独立代码来读取文件夹结构并返回数组中的所有.mp3 文件。返回后,我将遍历数组,并为每个项目创建一个 Mongoose 对象并填充字段,然后使用 .save() 保存对象。
我正在使用 async.forEach 循环遍历数组 - 虽然它确实循环遍历了数组中的所有项目,但它们没有保存,并且没有产生任何错误来帮助我找出问题所在。
如果我将循环的逻辑移到其他地方,则 MP3 将存储在 mongodb 数据库中 - 如果我有显示的示例,则不会保存任何内容。
var saveMP3s = function(MP3Files, callback) {
console.log('start loop -> saving MP3s');
async.forEach( MP3Files, function(mp3file, callback) {
newTrack = new MP3Track();
newTrack.title = mp3file.title;
newTrack.track = mp3file.track;
newTrack.disk = mp3file.disk;
newTrack.metadata = mp3file.metadata;
newTrack.path = mp3file.path;
console.log('....:> Song Start: ');
console.log(newTrack.title);
console.log(newTrack.track);
console.log(newTrack.disk);
console.log(newTrack.metadata);
console.log(newTrack.path);
console.log('....:> Song End: ');
newTrack.save(function (err) {
if (err) {
console.log(err);
} else {
console.log('saving Track: '+ newTrack.title);
callback();
}
});
}, function(err) {
if (err) { console.log(err); }
});
console.log('end loop -> finished saving MP3s');
};
我遇到的问题是,当代码不在异步循环中时,代码可以正常工作并且 MP3 保存在 MongoDB 数据库中,在异步代码内部没有保存任何内容,也没有给出原因的错误。
我确实尝试(在代码的早期版本中)在读取 MP3 文件的元数据后创建对象 - 但由于某种原因,它不会保存列表中的最后 2 个对象(共 12 个).. . 所以我重写了它,首先扫描所有项目,然后使用数组中的 mongoose 填充 mongoDB;只是为了把事情分开。但是没有运气找出为什么什么都没有发生以及为什么.save()没有错误
非常感谢任何帮助。
问候, 标记
【问题讨论】:
-
好的,但是你是在别处调用你的
saveMP3s函数,并传递一个回调函数吗? -
实际上该函数可以是 - 异步循环中的回调不会超出该函数。问题出在异步“循环”中,我认为如果我删除它,它将保存第一个对象。这回答了你的问题还是我完全不明白? :)
-
我正在调用 saveMP3s 函数,使用"
-
我调用函数使用:saveMP3s(json) - json 是多个我想保存为“newTrack”的项目
-
我很确定@AlexFord 是对的。他看到了我们没有看到的。
标签: node.js asynchronous mongoose