Ich erstelle eine grundlegende Migrationsklasse für meine App.Rückruf erhalten, wenn asynchrone Aufgaben abgeschlossen sind
// 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()
}
Meine server.js
sieht so aus.
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
Modell beruht auf Mongoose
. Im Moment bekomme ich das folgende Konsolenprotokoll.
Deleting entries...
Entries deleted. Seeding...
0 seeded!
...
20 seeded!
Ich möchte jedoch eine weitere Zeile am unteren Rand hinzuzufügen, wenn Aufgabe abgeschlossen ist, so sieht es aus wie diese.
Deleting entries...
Entries deleted. Seeding...
0 seeded!
...
20 seeded!
Command successful. Process exiting. // process.exit(0)
Gibt es eine Möglichkeit, dies zu tun? Sollte ich einen Rückruf auslösen, wenn die letzte Abfrage erfolgreich abgeschlossen wurde oder so?
Uh hat, ja. Sie müssen verfolgen, wann Ihre letzte asynchrone Operation abgeschlossen ist, und einen Rückruf aufrufen. Das beinhaltet normalerweise die Verwendung einer Art von Counter oder das Umschalten, um Versprechen zur Verwaltung Ihrer asynchronen Vorgänge zu verwenden. Du scheinst das schon zu wissen. Warum hast du das nicht einfach versucht? – jfriend00