をし、上述したように、A()とB()の両方が完了したかどうかを確認する完了状態を保持するために外部オブジェクトを使用して同じ結果を達成することができ、 C()を呼び出します。
function A(){
// ...
A.isComplete=true;
onComplete();
}
そしてonCompleteのこの新しいを確認する変更:
var results={};
function onComplete(){
if(results['A'] && results['B'] && !results['C']) {
C();
}
}
function A(){
// ...
results['A']=true;
onComplete();
}
function B(){
// ...
results['B']=true;
onComplete();
}
結果オブジェクトは同様に、A()及びB()の両方に 'isComplete' フラグを追加することによって置き換えることができる:のようフラグ:
function onComplete(){
if(A.isComplete && ...
}
あるいは、同じ使用してイベント:
var util=require('util'),
events=require('events'),
EventEmitter=events.EventEmitter;
function F(){
EventEmitter.call(this); // init ancestor
}
util.inherits(F,EventEmitter); // assign ancestor
F.prototype.A=function(){
var self=this;
console.log('running A()');
setTimeout(function(){ // simulate long running code - 5 seconds
F.prototype.A.isComplete=true;
self.emit('complete','A');
},5000);
};
F.prototype.B=function(){
var self=this;
console.log('running B()');
setTimeout(function(){ // simulate long running code - 3 seconds
F.prototype.B.isComplete=true;
self.emit('complete','B');
},3000);
};
F.prototype.C=function(){
console.log('running C()');
};
var f=new F;
f.on('complete',function(which){ // onComplete handler
console.log(which+'() is complete');
if(F.prototype.A.isComplete && F.prototype.B.isComplete){
f.C();
}
});
// start it up
f.A();
f.B();
実行、
は、生成されます:
>node example.js
running A()
running B()
B() is complete
A() is complete
running C()
>
[ ' async.parallel() '](https://github.com/caolan/async#parallel) –