this question과 동일한 문제가 있지만 해결할 솔루션이 없습니다. mongo에서 캐시 된 값을 먼저 확인하는 nodejs 스크립트를 작성하려고하지만, 존재하지 않는 경우이를 제거하고 계산합니다. 문제는 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