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