node.js - 如何等待所有异步调用完成

标签 node.js mongoose

我将 Mongoose 与 Node.js 结合使用,并具有以下代码,这些代码将在所有 save() 调用完成后调用回调。但是,我觉得这是一种非常肮脏的做法,希望看到完成这项工作的正确方法。

function setup(callback) {

  // Clear the DB and load fixtures
  Account.remove({}, addFixtureData);

  function addFixtureData() {
    // Load the fixtures
    fs.readFile('./fixtures/account.json', 'utf8', function(err, data) {
      if (err) { throw err; }
      var jsonData = JSON.parse(data);
        var count = 0;
        jsonData.forEach(function(json) {
          count++;
          var account = new Account(json);
          account.save(function(err) {
            if (err) { throw err; }
            if (--count == 0 && callback) callback();
          });
        });
    });
  }
}

最佳答案

您可以使用像 async 这样的库稍微清理一下代码。或 Step .

此外,我已经编写了一个小模块来为您处理加载夹具,因此您只需执行以下操作:

var fixtures = require('./mongoose-fixtures');

fixtures.load('./fixtures/account.json', function(err) {
  //Fixtures loaded, you're ready to go
};

Github: https://github.com/powmedia/mongoose-fixtures

它还会加载夹具文件或对象的目录。

关于node.js - 如何等待所有异步调用完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6673717/

相关文章:

javascript - 无法在同一类JS的另一个方法中调用方法

python - 如何在数千个 PDF 文件中抓取表格?

javascript - 数据未存储在 Mongodb 中

javascript - 使用 mongoose 保存嵌套对象(数组),在 mongodb 中结果为空对象

node.js - 有没有办法在服务器重新启动时自动重新加载 Node 检查器?

node.js - 用数据编译 gulp-jade

node.js - Mongoose 共享多个数据库的模型架构

javascript - 检查集合中的日期是否为 3、6 或 9 个月(依此类推)前

node.js - 文件之间的 NodeJs TypeScript 命名空间

node.js - Mongoose 如何从填充中排除_id