为什么在使用 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 在推送所有电子邮件之前返回。为什么?

克里斯坦纳

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

return redisClient(... 应该修复它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档