mongoose异步回调未定义

时间:2015-12-29 20:54:21

标签: javascript node.js mongodb asynchronous mongoose

我使用“猫鼬”#39;和' async'。我的搜索也有效,但在最后一次回调时,我的数据将不会被传递。变量始终未定义。在猫鼬的文档中,我还没有找到线索。我在代码中标明了上述位置。

async.whilst(
    function() {
      return noresult
    },
    function(callback) {
      if (day >= 7 && newdate >= 1440) {
        noresult = false;
        callback("Nothing", newquery);

      } else if (day < 7 && newdate >= 1440) {
        day++;
        newdate = 0;
        delete newquery['search.'
            ' + d[day- 1]];
            delete newquery['search.
              ' + d[day - 1] + '
              b '];
              newquery['search.' + d[day]] = {
                $lte: newdate
              }; newquery['search.' + d[day] + 'b'] = {
                $gte: newdate
              }; console.log("1 " + day + " " + newdate);
            } else if (day >= 7 && newdate < 1440) {
              newdate++;
              console.log("2 " + day + " " + newdate);
            } else if (day <= 7 && newdate < 1440) {
              newdate++;
              delete newquery['search.' + d[day - 1]];
              delete newquery['search.' + d[day - 1] + 'b'];
              newquery['search.' + d[day]] = {
                $lte: newdate
              };
              newquery['search.' + d[day] + 'b'] = {
                $gte: newdate
              };
            }

            Data.find(newquery, function(err, newresult) {
              if (err) {
                callback(err);
              }
              if (!newresult.length) {
                noresult = true;
                if (day >= 7 && newdate >= 1440) {
                  callback("Nothing found");
                } else {
                  callback(null, newquery);
                }
              } else {
                noresult = false;
                callback(null, newresult);
              }
            });


          },
          function(err, newresult) {
            if (err) {
              return res.status(404).send(err);
            }
            // At this point newresult is undefined
            return res.send(newresult);

          }
      );

1 个答案:

答案 0 :(得分:0)

我查看了async.whilst函数的实现,但它不会产生最终回调的最后结果。所以它可能会对文档产生一些误导。

我已经实现了自己的功能,而且可以满足您的需求:

var whilst = function (test, iterator, callback, prevResult) { 
    if (test()) { 
        iterator(function (err, result) { 
            if (err) { 
                return callback(err); 
            } 
            whilst(test, iterator, callback, result); 
        }); 
    } 
    else { 
        callback(null, prevResult); 
    } 
};

尝试使用它而不是async.whilst。让我知道它是否适合你。

更新

我发现实际上有一个关于这种误导的issue所以它将在较新版本的异步库中得到修复。