如何在多个事件全部被触发后调用函数

Tho*_*ang 0 javascript node.js

基本上我想要这样的东西(现在肯定不行).我完成res.send()后可以使用事件来实现client.get()吗?

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
});
Run Code Online (Sandbox Code Playgroud)

Ray*_*yon 5

使用Promise.all,Promise.all(iterable)方法返回一个promise,该promise在迭代参数中的所有promise已经解析时解析,或者拒绝第一个传递的拒绝的promise.

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
  });
})
Run Code Online (Sandbox Code Playgroud)

注意:timster评论,使用时考虑浏览器支持Promise object,Polyfill会有所帮助!