请参阅以下JavaScript:
(function() {
var allMatches = [];
$.getJSON("myURL", function(data) {
$.grep(data.feed.entry, function(element, index) {
var match = {
day: element.gsx$day.$t,
winner: element.gsx$winner.$t,
field: element.gsx$field.$t,
time: element.gsx$time.$t,
grade: element.gsx$grade.$t,
round: element.gsx$round.$t,
teamOne: element.gsx$team1.$t,
teamOneGoals: element.gsx$goals.$t,
teamOnePoints: element.gsx$points.$t,
teamOneTotal: element.gsx$totalscore.$t,
teamTwo: element.gsx$team2.$t,
teamTwoGoals: element.gsx$goals_2.$t,
teamTwoPoints: element.gsx$points_2.$t,
teamTwoTotal: element.gsx$total.$t
}
allMatches[index] = match;
});
});
var fridayMatches = SQLike.q(
{
Select: ['*'],
From: allMatches,
Where: function(){return this.day === "Friday"},
OrderBy: ['field','|asc|']
}
);
console.log(fridayMatches);
})();
如果我在allMatches[index] = match;
放置一个断点,我可以清楚地看到这个数组已经完全填充
但是,如果我在SQLike
代码的开头放下一个断点,那么allMatches就完全是空的。
为什么会这样,解决方案是什么?
答案 0 :(得分:1)
Becouse $ .getJSON是异步的。
您必须将SQlite代码放入函数中并从$ .getJSON回调中调用它。
答案 1 :(得分:1)
$ .getJSON是一个Ajax调用,而Ajax标准中的“a”是异步的。
用于处理ajax响应的匿名函数在返回ajax调用之前不会运行。