我有与this question相同的问题,但无法获得解决方案的工作。我正在尝试编写一个nodejs脚本,它将首先检查mongo中的缓存值,但如果它不存在,那么请关闭并计算它。问题是findOne()回调没有获得循环变量的原始值,因此回调函数无法正确计算和存储该值。 (我已经省略了实际的提取,存储和返回以专注于我所遇到的实际问题)。无论我做什么,我都无法获得原始价值以进入回调。如何将变量的当前值发送到异步回调
for (var d=start_date; d<now; d.setHours(d.getHours()+1)) {
(function(key) {
console.log('caller='+key)
db.collection('avgs').findOne({ date: key.toISOString() },function (err,data) {
console.log('callback='+key);
if (data) { //return data }
else { // compute average for given date , insert into database and return value }
});
})(d);
};
控制台日志显示此
caller=Tue Mar 25 2014 00:00:00 GMT+1030 (CST)
caller=Tue Mar 25 2014 01:00:00 GMT+1030 (CST)
caller=Tue Mar 25 2014 02:00:00 GMT+1030 (CST)
caller=Tue Mar 25 2014 03:00:00 GMT+1030 (CST)
callback=Wed Mar 26 2014 14:00:00 GMT+1030 (CST)
callback=Wed Mar 26 2014 14:00:00 GMT+1030 (CST)
callback=Wed Mar 26 2014 14:00:00 GMT+1030 (CST)
callback=Wed Mar 26 2014 14:00:00 GMT+1030 (CST)
哇的值!非常喜欢这个解决方案 – Sethunath