Parse.com 云代码 - 无法弄清楚为啥 javascript 变量在所有数组项中具有相同的值
Posted
技术标签:
【中文标题】Parse.com 云代码 - 无法弄清楚为啥 javascript 变量在所有数组项中具有相同的值【英文标题】:Parse.com cloud code- Cant figure out why javascript variable has same value in all array itemsParse.com 云代码 - 无法弄清楚为什么 javascript 变量在所有数组项中具有相同的值 【发布时间】:2014-07-21 13:25:14 【问题描述】:我有以下云代码获取一些记录,然后将它们与相应的日期一起添加到数组中,但数组似乎总是具有相同的日期,即该范围内的最后一个日期。
Parse.Cloud.define("getJournalEntryWeekly", function(request, response)
var currDate =new Date( request.params.currDate);
var user = request.params.user;
var avgArray = [];
var success = false;
var counter = 0;
var day=0;
var d1;
var d2;
for(i = 0;i < 7; i++)
d1 = new Date(currDate.getTime() + 1000 * 60 * 60 * 24 * (i+1));
d2 = new Date(currDate.getTime() + 1000 * 60 * 60 * 24 * (i));
var query = new Parse.Query("JournalEntry");
query.greaterThan("createdAt",d2);
query.lessThan("createdAt",d1);
query.equalTo("userName",user);
query.find(
success: function(results)
counter++;
var avg=0;
var level = 0;
var total = results.length;
for(j = 0; j < results.length ; j++)
var entry = results[j];
level += entry.get("happinessLevel");
//avgArray.push(entry.get("happinessLevel"));
if(results.length != 0)
avg = level/total;
day++;
avgArray.push(day:d1,avg:avg);
if(counter == 7)
response.success(avgArray);
,
error: function()
counter++;
//response.error("no entry found");
);
);
下面是输出
"result":["day":"__type":"Date","iso":"2014-07-27T00:00:00.000Z","avg":63," day":"__type":"Date","iso":"2014-07-27T00:00:00.000Z","avg":0,"day":"__type":"Date" ,"iso":"2014-07-27T00:00:00.000Z","avg":0,"day":"__type":"Date","iso":"2014-07-27T00 :00:00.000Z","avg":0,"day":"__type":"Date","iso":"2014-07-27T00:00:00.000Z","avg" :0,"day":"__type":"Date","iso":"2014-07-27T00:00:00.000Z","avg":0,"day":" __type":"Date","iso":"2014-07-27T00:00:00.000Z","avg":0]
我添加到响应数组中的日期变量 d1 始终为其最后一个值,实际上应该随着从开始日期到结束日期添加的每个数组项而改变。
【问题讨论】:
【参考方案1】:过于简单化:
当您调用avgArray.push(day:d1,avg:avg);
时,您将处于先前调用find()
的异步运行完成回调中。这将在您对find()
(在您的循环中)进行所有调用之后运行。所以,此时d1
就有了最后一个循环的值。
准确描述:javascript closures and value capture。
该链接显示了一个很好的解决方案,即使用一个函数来捕获闭包内的值。我不能说我已经在您的具体示例中尝试过,这是一个复杂的问题,但它应该为您指明正确的方向。
【讨论】:
感谢那篇文章解释它将尝试解决方案希望它对我有所帮助。以上是关于Parse.com 云代码 - 无法弄清楚为啥 javascript 变量在所有数组项中具有相同的值的主要内容,如果未能解决你的问题,请参考以下文章
使用 mypy 进行类型检查,我无法弄清楚为啥会发生此错误 [关闭]