2

ノードを使用してこれを実行すると、「Connected to Database」が出力されます。

var MongoClient = require("mongodb").MongoClient;
MongoClient.connect("mongodb://localhost/db1", function(err, db) {
  if (err) {
    throw err;
  }
  console.log("Connected to Database");
  db.close();
});

ただし、Grunt タスクで実行しようとすると、何もせずに静かに実行されます。

module.exports = function(grunt) {
  return grunt.registerTask("task", "subtask", function() {
    var MongoClient = require("mongodb").MongoClient;
    return MongoClient.connect("mongodb://localhost/db1", function(err, db) {
      if (err) {
        throw err;
      }
      console.log("Connected to Database");
      db.close();
    });
  });
};

なぜこれが必要なのか、おそらく回避策を提供できる人はいますか?

4

1 に答える 1

2

すべてが正常に機能します。

データベース接続は非同期であるため、接続が確立される前に、うなり声がタスクを「殺します」。

タスクは次のようになります。

module.exports = function(grunt) {
  return grunt.registerTask("task", "subtask", function() {
    var done = this.async();
    var MongoClient = require("mongodb").MongoClient;
    MongoClient.connect("mongodb://localhost/db1", function(err, db) {
      if (err) {
        done(false);
      }
      console.log("Connected to Database");
      db.close();
      done();
    });
  });
};

これに関する grunt ドキュメントには、セクション全体があります。非同期タスクが完了しないのはなぜですか?

于 2013-11-11T17:59:17.897 に答える