이전 클래스에 의존하는 여러 모듈을 인스턴스화하는 클래스를 정의하고 있습니다. 모듈 자체가 준비되기 전에 (즉, 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를 호출 같은데요 생성자 완료하기 전에 다음 함수를 비동기 진행을 의미한다 : 즉시 준비 클래스를 인스턴스화 할 때 그러나 나는 문제로 실행했습니다. 이것에 대한 더 나은 접근법이 있습니까? 나는 약속을 사용하는 것을 고려했다. 그러나 나는이 접근법을 이해하기 쉽고 따르기 쉽다고 생각한다.
관련의 종합 정밀 검사의 :의 [? 그것은 생성자 함수는 약속을 반환해야하는 나쁜 관행인가] (http://stackoverflow.com/q/24398699/1048572) – Bergi
가능한 중복 [ 비동기 생성자] (http://stackoverflow.com/questions/11856778/asynchronous-constructor) –