下面的代码有两件事:
1)首先暂停解析器,如果用户不存在则查询用户集合,然后创建用户。
2)然后通过从上传的原始数据创建(保存)故事文档来完成,并恢复解析器。
当我运行代码时,除了一行之外的所有文档都会被解析和上传。 (文件大小并不重要,总是跳过一行)。
如果我自己运行checkLength函数,则会正确上传和保存文件而不会出现问题。
所以我的问题是:我在这里正确使用回调吗?我的最终目标是在findUsers完成后运行checkLength函数,然后继续解析。我猜测承诺也很有用,但我不想跳得太远。
let parser = csv
.fromString(myFile, {
renameHeaders: true,
headers: headerArray,
ignoreEmpty: true
})
.on("data", function(data) {
let checkLength = function() {
data.endUser = user;
stories.push(data);
if (Story.length > 100) {
Test.Story.create(stories, function(err) {
if (err) throw err;
});
storiesTotalLength += stories.length;
stories= [];
}
parser.resume();
}
let findUsers = function(callback) {
User.findOne({
name: data.endUser
}, function(err, results) {
if (err) throw err;
if (results) {
callback();
}else{
user = {
name: data.endUser,
_id: new mongoose.Types.ObjectId()
}
User.create(user, function(err) {
if (err) throw err;
callback();
});
}
});
}
parser.pause();
findUsers(checkLength);
})
.on("end", function() {
Story.create(stories, function(err) {
if (err) throw err;
});
res.render('pages/uploadpage', {
message: (`${stories.length + storiesTotalLength} documents have been successfully uploaded. ${users.length} Total New Users`)
});
});