【发布时间】:2023-03-16 14:08:01
【问题描述】:
我正在为我的应用创建一个基本的迁移类。
// 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)
有没有办法做到这一点?当最后一个查询成功完成时我应该抛出一个回调吗?
【问题讨论】:
-
嗯,是的。您必须跟踪上一次异步操作何时完成并调用回调。这通常涉及使用某种计数器或切换到使用 Promise 来管理您的异步操作。你似乎已经知道了。你为什么不试试呢?
标签: node.js mongodb asynchronous mongoose