将Parse查询结果推送到数组中:JavaScript

问题描述:

我需要绘制由Parse返回的查询结果的图形。用户将选择日期,然后我创建这两个日期之间存在的日期数组,然后我传递该数组来解析查询。 我的代码如下:将Parse查询结果推送到数组中:JavaScript

var from = $("#from").val(); //to get from value from a form 
var to = $("#to").val(); //to get to value from a form 

var dates = []; //to store all dates 
var data = []; // to store all data returned by parse 
var currentDate = from; 
dates.push(from); 

while (currentDate != to) { 

var addOne = moment(currentDate, "YYYY-MM-DD").add(1, 'days'); 
currentDate = moment(addOne).format('YYYY-MM-DD'); 
dates.push(currentDate); 

} // to get all dates present between two dates 

//using for loop to get data from parse 
for(var j = 0; j < dates.length; j++) 
    { 

    var dateStart = moment(dates[j], "YYYY-MM-DD").startOf('day'); //to get start of day 
    var dateEnd = moment(dates[j], "YYYY-MM-DD").endOf('day'); // to get end of day 

    var noRequests = Parse.Object.extend("Requests"); 
    var query = new Parse.Query(noRequests); 

    //then I am using greaterThanOrEqualTo and lessThan to calculate number of request made onn that day 
    query.greaterThanOrEqualTo('createdAt', dateStart._d); 
    query.lessThan('createdAt', dateEnd._d); 

    query.count({ 
     success: function(count) { 

     data.push(count); 

     if(data.length == dates.length) 
     { 
     //passing both array to function which will draw graph using both arrays 
     drawGraph(dataArray,dateArray); 

     } 

    } 
    }); 


    } 

但由于解析的异步性质,有时我不能正确得到结果的顺序。有什么建议么?先谢谢你。

+0

更换'count'方法,而不是在数组的末尾推入count(因此失去了顺序),将它添加到字典中,并使用从'success'回调参数中检索的唯一标识关键字。 –

+0

好的,我会试试这个,并会告诉你它是否工作。谢谢您的回复。 –

+0

我试过得到的方法而不是计数,但它没有工作。 –

把请求放在循环中总是一个坏主意。我也很惊讶,因为你没有回复任何承诺,所以这一切都有效。您需要为此使用var _ = require("underscore");,但它会确保您的承诺以正确的顺序执行。

这也是没有启动解析请求的方式。除了使用

var noRequests = Parse.Object.extend("Requests"); 
var query = new Parse.Query(noRequests); 

的你应该使用:

var query = new Parse.Query("Request"); 

如果你真的想这个循环的要求,你需要做一些事情,如:

var promises = _.map(dates, function(date){ 
    var dateStart = moment(dates[j], "YYYY-MM-DD").startOf('day'); //to get start of day 
    var dateEnd = moment(dates[j], "YYYY-MM-DD").endOf('day'); // to get end of day 
    var query = new Parse.Query("Request"); 
    query.greaterThanOrEqualTo('createdAt', dateStart._d); 
    query.lessThan('createdAt', dateEnd._d); 
    return query.count() 
     .then(function(count){ 
      data.push(count); 
     }, function (error){ 
      console.error(error); 
     }); 
    });