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

时间:2015-10-05 09:53:33

标签: javascript parse-platform

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

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

      }

    }
    });


  }

但由于Parse的异步性质,有时候我没有正确获得结果序列。有什么建议?提前谢谢。

1 个答案:

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