我使用“猫鼬”#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);
}
);
答案 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所以它将在较新版本的异步库中得到修复。