Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parse.com云代码-无法理解为什么javascript变量在所有数组项中具有相同的值_Javascript_Ios_Parse Platform_Cloud - Fatal编程技术网

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
具有最后一个循环的值

准确描述:


该链接显示了一个很好的解决方案,即使用函数捕获闭包中的值。我不能说我已经在你的具体例子中尝试过了,这是一个复杂的问题,但它应该为你指明正确的方向。

谢谢你,那篇文章解释了这一点,我将尝试解决方案,希望能对我有所帮助。