【问题标题】:How to call a function after multiple events are all triggered多个事件全部触发后如何调用函数
【发布时间】:2016-04-30 03:46:30
【问题描述】:

基本上我想要这样的东西(现在肯定不行)。 我可以在所有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
});

【问题讨论】:

标签: javascript node.js


【解决方案1】:

使用 Promise.allPromise.all(iterable) 方法返回一个 promise,当 iterable 参数中的所有 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
  });
})

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

【讨论】:

  • @xgwang,很高兴为您提供帮助!
  • 好的提示,但是 MSIE(最多 11 个)不支持 Promise 对象。
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 2012-10-01
  • 2023-04-02
相关资源
最近更新 更多