我有獲取從外部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 **事件的回調。所以它現在仍然在回調之前執行。 –