在使用node和redis时,为什么我的承诺无法解决?我的数组返回第一次迭代,而不是等待整个代码运行

时间:2018-02-16 19:10:39

标签: redis promise es6-promise node-redis

app.get('/lists/get_emails', function(req, res) {
  //  Return *all* the emails that appear in *any* of the lists in
  // `req.body.lists`. Emails should only appear once.
  let queryArr = req.query.lists.split(",");
  var retArr = [];
  Promise.all(queryArr.map(list => {
    redisClient.smembersAsync(list)
      .then((results) => {
        if(results) {
          console.log('retArr  before push', retArr);
          for (email in results) {
            retArr.push(results[email])
          }
          console.log('retArr after push', retArr);
          return Promise.all(retArr);
        } else {
          res.send({results: null});
        }
      })
      .then(result => {
        console.log('resssssss!', result);
        return Promise.all(result);
      })
      .catch(error => {
        console.log('error submitting final emails', error);
      });
  }))
})

当返回retArr时,它包含一个列表的电子邮件,但不包含所有列表的电子邮件。我的控制台日志显示列表已加载到retArr中,但似乎retArr在推送所有电子邮件之前返回。为什么呢?

1 个答案:

答案 0 :(得分:0)

您的redisClient ..链返回一个承诺,但您不会将该承诺返回给地图。

add_action('reviews', array( EDD_Reviews::get_instance(), 'load_frontend')); 应该修复它。