2016-04-30 9 views
0

基本的には、私はこのようなことをしたいと思います。 client.get()が終了した後にイベントを使用してres.send()を実行することはできますか?複数のイベントがすべてトリガーされた後に関数を呼び出す方法

var events = require('events'); 
var eventEmitter = new events.EventEmitter(); 

var response = {}; 
var ids = [...]; 

for (id in ids) { 
    this.client.get(id1, function(err, obj) { 
    if (!err) { 
     response[id.toString()] = obj; 
    } 
    }); 
} 

res.send({ 
    response 
}); 
+0

参照:!http://stackoverflow.com/questions/8011652/jquery-when-with-variable-arguments –

答えて

5

使用Promise.allPromise.all(反復可能)メソッドは、反復可能な引数での約束がすべて解決されていたときに解決する約束を返す、または最初に渡さ約束の理由で拒否それは拒絶する。

var events = require('events'); 
 
var eventEmitter = new events.EventEmitter(); 
 

 
var response = {}; 
 
var ids = [...]; 
 
var promiseArr = []; 
 
for (id in ids) { 
 
    var prom = new Promise(function(resolve, reject) { 
 
    this.client.get(id1, function(err, obj) { 
 
     if (!err) { 
 
     response[id.toString()] = obj; 
 
     resolve(); 
 
     } 
 
    }); 
 
    }) 
 
    promiseArr.push(prom); 
 
} 
 
Promise.all(promiseArr).then(function() { 
 
    res.send({ 
 
    response: response 
 
    }); 
 
})

注:timsterでコメントしとして、Promise objectを使用しているブラウザのサポートを考えてみましょう、Polyfillを助けます!

+0

Thxを、約束は_ –

+0

@xgwang、_Gladに見えますが、MSIE(まで11)はPromiseオブジェクトをサポートしていません。 – Rayon

+0

良いヒントを支援するために、クール –

関連する問題