2016-07-23 51 views
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) 

有没有办法做到这一点?我应该在最后一次查询成功完成时发出回调吗?

+0

嗯,行尾加上一个if语句,是的。您必须跟踪最后一次异步操作何时完成并调用回调。这通常涉及使用某种计数器或切换到使用承诺来管理异步操作。你似乎已经知道了。你为什么不试试? – jfriend00

回答

0

你可以有

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

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