2016-11-22 57 views
0

我遇到了這個問題,我試圖爲從API檢索圖像並顯示它的項目創建幻燈片。我有以下功能getPictures(id,number,callback),根據選項返回對象/數組/回調香草JS試圖維持執行順序(異步)

加載picturesList,我試圖動態擴展它,它現在是一個全局變量,我正在修改點擊nextPicture(button)時的修改。

next.onclick = function() { 
    append(); 
    nextPic(); 
}; 

我遇到的問題是,當我把一個條件來檢查索引和檢索一個新的picturesList,這樣我可以追加到全球性的,它口口聲聲說,返回的數組是不確定的。

function append(){ 
    var t; 
    getPictures(pic[0].id, 7, function(response) { 
     t = response.pics; 
    }); 
    picturesList.push(t); 
} 

但執行順序是什麼,我無法控制並且是Java程序員幾個概念都比較混亂。什麼是最好的方法來解決這個問題?我讀了回調和承諾,但他們似乎沒有迎合設置全局變量(圖片列表)

+1

執行順序很好 - 這是你對它的理解,這就是你的問題。 't'只在對'getPictures()'的異步調用完成時才被設置,但是該調用之後的下一行代碼立即執行。 – Archer

回答

0

如果你只需要在異步調用完成後調用nextPic()那麼你可以簡單地在回調中移動函數調用...

next.onclick = function() { 
    append(); 
}; 

function append(){ 
    getPictures(pic[0].id, 7, function(response) { 
     picturesList.push(response.pics); 
     nextPic(); 
    }); 
} 

如果你想在其他地方使用append功能,無需調用nextPic()那麼你可以添加一個可選的回調函數...

next.onclick = function() { 
    append(nextPic); 
}; 

function append(callback){ 
    getPictures(pic[0].id, 7, function(response) { 
     picturesList.push(response.pics); 
     if (callback != undefined) { 
      callback(); 
     } 
    }); 
}