【发布时间】:2015-03-29 10:22:36
【问题描述】:
我正在定义一个类,它实例化几个依赖于先前模块的模块。模块本身可能需要在准备好之前进行异步操作(即建立 mysql 连接),因此我为每个构造函数提供了一个回调,以便在模块准备好后调用。但是我在实例化立即准备好的类时遇到了问题:
var async = require('async');
var child = function(parent, cb) {
var self = this;
this.ready = false;
this.isReady = function() {
return self.ready;
}
/* This does not work, throws error below stating c1.isReady is undefined*/
cb(null, true);
/* This works */
setTimeout(function() {
self.ready = true;
cb(null, true);
}, 0);
}
var Parent = function(cb) {
var self = this;
async.series([
function(callback){
self.c1 = new child(self, callback);
},
function(callback){
self.c2 = new child(self, callback);
}
],
function(err, results){
console.log(self.c1.isReady(), self.c2.isReady);
console.log(err, results);
});
}
var P = new Parent();
我猜问题是在构造函数中调用 cb 意味着 async 在构造函数完成之前继续执行下一个函数。有更好的方法吗?我考虑过使用 Promise,但我发现这种方法更容易理解/遵循。
【问题讨论】:
标签: javascript node.js async.js