我有获取从外部API问题的功能。我需要在数组中至少有5个问题才能运行我的应用程序。检查返回的JSON的价值和更新,如果假
function getCategoryQuestions(){
var questions = {};
var i = 0;
for (i; i < 6; i++){
$.getJSON(makeURL(), function(data){
data = data.category;
questions[data.name] = data.questions;
validQuestionsLength(questions, data.questions)
})
}
return questions;
}
我运行validQuestionsLength,以检查是否每个问题阵列在长度为至少5个元素。
function validQuestionsLength(hash, array){
while (array.length < 5) {
$.getJSON(makeURL(), function(data){
data = data.category;
hash[data.name] = data.questions
array = data.questions;
})
console.log(array.length)
}
}
我想检查一个数组的长度是否小于5,如果是的话我会从url中获取一个新的资源。我将把新的值保存到数组中,然后它会检查这个新值的数组长度。我希望它保持获取数据,直到条件成立。
发生了什么事是,一旦validQuestionsLength()方法运行和我有一个数组长度与小于5时,它保持在console.logging无限循环当前阵列。我以为我在每个循环中保存了一个新的资源。
我不知道在我的逻辑错误发生。
我知道有发生如此前的数组变量被复位的console.log可能运行的异步请求。我编辑我的验证功能,包括做回调执行一次异步完成
function validQuestionsLength(hash, array){
if (array.length < 5) {
$.getJSON(makeURL(), function(data){
data = data.category;
hash[data.name] = data.questions
console.log("data is ", data.questions)
array = data.questions;
}).done(console.log("array is ", array))
}
}
我的目的是向新取的数据保存到数组。但data.questions和数组(它应该指向data.questions的值)是不同的值。 .done()在这种情况下做什么?
那么你的电话一次还是N还是一个问题?您是否在查找所有data.name条目中的每个data.name五个或五个总数?现在你拥有数组的方式会被每次调用覆盖,所以除非你的api调用返回五个项目,否则你将永远循环。 – Michael
使用'array.push(data.questions)'而不是'array = data.questions;'我不知道你的Json结构,你可能需要在其中添加一些索引,比如'questions [0]'或者其他东西 – Viney
你'重新设置完成回调函数错误,您需要将代码嵌入到lambda函数中,以便成功回调,现在您将console.log的设置结果作为** done **事件的回调。所以它现在仍然在回调之前执行。 –