Я определяю класс, который создает несколько модулей, которые зависят от предыдущих. Сами модули могут потребовать операцию async, прежде чем они будут готовы (т. Е. Установить соединение mysql), поэтому я предоставил каждому конструктору обратный вызов, который будет вызываться, как только модуль будет готов. Однако я столкнулся с проблемой, когда инстанцирование классов, которые готовы немедленно:Javascript: шаблон конструктора async
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();
Я предполагаю, что вопрос вызов сЬ внутри конструктора означают асинхронный переходит к следующей функции перед вызовом конструктора отделки. Есть ли лучший подход к этому? Я решил использовать обещания, но я считаю, что этот подход легче понять/следовать.
родственный: [? Это плохая практика, чтобы иметь конструктор функции возвращают Promise] (http://stackoverflow.com/q/24398699/1048572) – Bergi
Возможный дубликат [ Асинхронный конструктор] (http://stackoverflow.com/questions/11856778/asynchronous-constructor) –