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

将解析查询结果推送到数组中:JavaScript,javascript,parse-platform,Javascript,Parse Platform,我需要绘制一个由Parse返回的查询结果图。用户将选择ToDates,然后我将创建这两个日期之间的日期数组,然后我将该数组传递给解析查询。 我的代码如下: 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 = []

我需要绘制一个由Parse返回的查询结果图。用户将选择ToDates,然后我将创建这两个日期之间的日期数组,然后我将该数组传递给解析查询。 我的代码如下:

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);

      }

    }
    });


  }

但由于解析的异步性质,有时我无法正确地获得结果序列。有什么建议吗?提前感谢您。

将请求放入循环总是一个坏主意。我也很惊讶,考虑到你没有从中得到任何回报,这一切都是有效的。您需要使用var=requireunderscore;但这将确保你的承诺按正确的顺序执行

这也不是启动解析请求的方法。而不是使用

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);
        });
    });

将count方法替换为get,并将其添加到字典中从success回调参数检索到的唯一标识键处,而不是在数组末尾推计数,从而失去顺序。好的,我将尝试此方法,并让您知道它是否有效。谢谢你的回复。我尝试了get方法而不是count,但它不起作用。我不知道web API,从未使用过它,因此我无法进一步帮助你。因此,阅读并努力学习。