0
我正在为我的应用程序创建基本迁移类。当异步任务完成时获取回调
// commands/migrate.js
const Question = require('../models/Question');
class Migrate
{
constructor() {
}
run() {
console.log("Deleting entries...");
Question.remove({}, (err) => {
if (err) {
throw err;
}
console.log("Entries deleted. Seeding...");
for (var i = 0; i <= 20; i++) {
new Question({
id: i,
title: "Who are you?",
answers: [
"Answer 1",
"Answer 2",
"Answer 3",
"Answer 4"
],
correctAnswer: 0
}).save((err, entry) => {
if (err) {
throw err;
return;
}
console.log(entry.id + "seeded!");
});
}
});
}
}
module.exports =() => {
return new Migrate()
}
我的server.js
看起来像这样。
if (typeof process.argv[2] !== "undefined") {
switch (process.argv[2]) {
case "migrate":
require('./commands/' + process.argv[2] + '.js')().run()
break;
default:
throw new Error("Invalid command.");
}
return;
}
Question
模型依赖于Mongoose
。现在我得到以下控制台日志。
Deleting entries...
Entries deleted. Seeding...
0 seeded!
...
20 seeded!
但是,我想在任务完成时在底部添加一行,所以它看起来像这样。
Deleting entries...
Entries deleted. Seeding...
0 seeded!
...
20 seeded!
Command successful. Process exiting. // process.exit(0)
有没有办法做到这一点?我应该在最后一次查询成功完成时发出回调吗?
嗯,行尾加上一个if语句,是的。您必须跟踪最后一次异步操作何时完成并调用回调。这通常涉及使用某种计数器或切换到使用承诺来管理异步操作。你似乎已经知道了。你为什么不试试? – jfriend00