将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);
}
}
});
}
但由于解析的异步性质,有时我不能正确得到结果的顺序。有什么建议么?先谢谢你。
答
把请求放在循环中总是一个坏主意。我也很惊讶,因为你没有回复任何承诺,所以这一切都有效。您需要为此使用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);
});
});
更换'count'方法,而不是在数组的末尾推入count(因此失去了顺序),将它添加到字典中,并使用从'success'回调参数中检索的唯一标识关键字。 –
好的,我会试试这个,并会告诉你它是否工作。谢谢您的回复。 –
我试过得到的方法而不是计数,但它没有工作。 –