javascript - Q.all block 中的所有功能均未得到 promise

标签 javascript node.js promise q

我在 then block 中有以下代码

我面临的问题是最后当我执行 res.json(optionData1) 时,它没有返回完全完成的 js 数据对象,即 processData 函数后的输出丢失

我是否以正确的方式使用 Q.all?

var processUserInfo = function(categoryToProcess, inputToProcess, optionComingIn) {

  var d = Q.defer();    

  if (optionData1['option'] == optionComingIn) {
    if (optionData1[categoryToProcess].hasOwnProperty(inputToProcess)) {
      optionData1[categoryToProcess][inputToProcess]++;
    } else {
      optionData1[categoryToProcess][inputToProcess] = 1;
    }
    d.resolve(optionData1);
  }

}

var processData = function(item, optionComingIn) {
  var d = Q.defer();
  return User.find(
    {_id: item},
    {gender: 1, country:1},
    function(req, foundUser) {
      processUserInfo('gender', foundUser[0]['gender'], optionComingIn)
      .then(function(resolve,reject) {
          d.resolve();
      });
    });
    return d.promise;
  }


  Q.all(foundQ[0]['people'].map(function(item) { // Or Q.allSettled
    processCounts(item['optionSelected']);
    processData(item['userID'], item['optionSelected']);
  }))
  .then(function(){
    res.json(optionData1);   //Doesnt give me the full result
  });

谢谢

更新:使用下面答案中的返回方法使一切正常。

最佳答案

这是可能有效的代码 - 您的代码片段中有太多“未知”内容

  • 修改了 processData 以返回一个在 user.Find 完成时解析的 Promise
  • .map中添加了一个返回,因此processData返回的promise在Q.all中等待

所以...这是固定代码(processuserInfo 未更改,因此省略了答案)

var processData = function (item, optionComingIn) {
    // return a promise to wait for
    return Q.promise(function(resolve, reject) {
        User.find({
            _id: item
            }, {
                gender: 1,
                country: 1
            },
            function (req, foundUser) {
                processUserInfo('gender', foundUser[0]['gender'], optionComingIn);
                resolve();
            }
        );
    });
}


Q.all(foundQ[0]['people'].map(function (item) { // Or Q.allSettled
    processCounts(item['optionSelected']);
    return processData(item['userID'], item['optionSelected']);
    // return added
}))
.then(function () {
    res.json(optionData1); //Doesnt give me the full result
});

关于javascript - Q.all block 中的所有功能均未得到 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35429912/

相关文章:

javascript - 如何在 typescript 中注释生成器函数

javascript - 使用 ajax 获取的数据作为 json 被随机推送到一个数组中

javascript - TypeError : $(. ..).offset(...) 未定义且偏移存在

javascript - react 事件层次问题

javascript - promise 链如何引用下一个错误处理程序

java - 如何在 Node js/Java 中捕获网络调用?

javascript - 如何正则表达式多变量

node.js - [tokio-rs] [文档]具有共享状态示例的多个异步 “sub-apps”?

javascript - .then 的 Promise.all 结果永远不会执行

javascript - 如何在JS/TS中实现伪阻塞异步队列?