【问题标题】:Getting a callback when asyncronous tasks are completed异步任务完成时获取回调
【发布时间】: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


【解决方案1】:

你可以在有的行后面放一个 if 语句

console.log(entry.id + "seeded!");

if (entry.id === 20) console.log('Command successful. Process exiting.');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    相关资源
    最近更新 更多