Parse.com云代码-无法理解为什么javascript变量在所有数组项中具有相同的值
我有下面的云代码获取一些记录,然后将它们与相应的日期一起添加到一个数组中,但数组总是显示相同的日期,即范围内的最后一个日期Parse.com云代码-无法理解为什么javascript变量在所有数组项中具有相同的值,javascript,ios,parse-platform,cloud,Javascript,Ios,Parse Platform,Cloud,我有下面的云代码获取一些记录,然后将它们与相应的日期一起添加到一个数组中,但数组总是显示相同的日期,即范围内的最后一个日期 Parse.Cloud.define("getJournalEntryWeekly", function(request, response) { var currDate =new Date( request.params.currDate); var user = request.params.user; var avgArray = [];
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");
}
});
}
});
Parse.Cloud.define(“getJournalEntryWeekly”),函数(请求、响应){
var currDate=新日期(request.params.currDate);
var user=request.params.user;
var avgArray=[];
var成功=false;
var计数器=0;
var日=0;
变量d1;
var-d2;
对于(i=0;i<7;i++)
{
d1=新日期(currDate.getTime()+1000*60*60*24*(i+1));
d2=新日期(currDate.getTime()+1000*60*60*24*(i));
var query=newparse.query(“JournalEntry”);
query.greaterThan(“createdAt”,d2);
查询:lessThan(“创建数据”,d1);
query.equalTo(“用户名”,用户);
查询.查找({
成功:功能(结果){
计数器++;
var平均值=0;
风险值水平=0;
var total=结果长度;
对于(j=0;j
以下是输出
[结果]结果:{“结果”结果:{“结果”结果:{“结果”结果:{“结果”结果:{“结果”结果:{“结果”结果:{“结果”结果:{“结果”结果:{“日”结果:{“日”结果:{“日”结果:{“日”结果:{“日”,“日”结果:{“日”,“日”结果:,[结果:,,,,,[日:{“日:,,,,,[日:{”日期:{“日:{”日期:,,,,,,{“日:{“日:{”日期:{“日:,,,,[日:,,,,,,[日:{”日期:{“日:{”日期:,,,,,,,,[日:,,,,,,,,,[日:,,,,,,,,,[日:,,,,,,,,,[日:,,,,,,,,,,,,,,,“日期”,“iso”:“2014-07-27T00:00:00.000Z”},“平均值”:0},{“日期”:{“日期”,“iso”:“2014-07-27T00:00:00.000Z”},“平均值”:0},{“日期”:{“日期”,“iso”:“2014-07-27T00:00:00.000Z”},“平均值”:0}
我添加到响应数组中的日期变量d1始终是其最后一个值,对于从开始日期到结束日期添加的每个数组项,该值实际上都应该更改。过于简单化:
当您调用avgArray.push({day:d1,avg:avg})时
您处于对find()
的上一次调用的异步运行完成回调中。这将在所有对find()
(在循环中)的调用完成后运行。因此,此时,d1
具有最后一个循环的值
准确描述:
该链接显示了一个很好的解决方案,即使用函数捕获闭包中的值。我不能说我已经在你的具体例子中尝试过了,这是一个复杂的问题,但它应该为你指明正确的方向。谢谢你,那篇文章解释了这一点,我将尝试解决方案,希望能对我有所帮助。