我希望在繼續下一個函數/代碼行之前爲變量分配一個來自異步函數回調的值。等待異步函數在繼續之前完成
在我的jsfiddle中,標題變量是我想要獲取Soundcloud track API請求的值。希望你明白我的意思,否則我會回來進一步解釋。
最近我開始理解異步函數是如何工作的,讓我明白了爲什麼我的代碼,並沒有真正的工作。我正在尋找的是一種讓變量playerData等待運行直到標題被分配的方法。
如果這是不可能的,我會很感激其他技巧,如何讓這個工作,因爲我想。
謝謝!
Ps。在我的真實網頁中,每個「玩家」div都會包含具有不同藝術家的玩家。
從我的jsfiddle相關的JavaScript在註釋行是我將不得不把它,如果它不是爲異步問題:
$(document).ready(function() {
var source = document.getElementById('player-template').innerHTML;
var playerTemplate = Handlebars.compile(source);
SC.initialize({
client_id: '90fb9e15c1e26f39b63f57015ab8da0d'
});
var title1;
var title2;
SC.get("https://stackoverflow.com/users/theshins/tracks", function(tracks){
SC.oEmbed(tracks[0].permalink_url + "/&maxheight=100&maxwidth=300&format=json&sharing=false", document.getElementById('player1'));
//title1 = tracks[0].title;
});
SC.get("https://stackoverflow.com/users/theshins/tracks", function(tracks){
SC.oEmbed(tracks[0].permalink_url + "/&maxheight=100&maxwidth=300&format=json&sharing=false", document.getElementById('player2'));
//title2 = tracks[0].title;
});
SC.get("https://stackoverflow.com/users/theshins/tracks", function(tracks){
SC.oEmbed(tracks[0].permalink_url + "/&maxheight=100&maxwidth=300&format=json&sharing=false", document.getElementById('player3'));
});
SC.get("https://stackoverflow.com/users/theshins/tracks", function(tracks){
SC.oEmbed(tracks[0].permalink_url + "/&maxheight=100&maxwidth=300&format=json&sharing=false", document.getElementById('player4'));
});
SC.get("https://stackoverflow.com/users/theshins/tracks", function(tracks){
SC.oEmbed(tracks[0].permalink_url + "/&maxheight=100&maxwidth=300&format=json&sharing=false", document.getElementById('player5'));
});
SC.get("https://stackoverflow.com/users/theshins/tracks", function(tracks){
SC.oEmbed(tracks[0].permalink_url + "/&maxheight=100&maxwidth=300&format=json&sharing=false", document.getElementById('player6'));
});
//Data that will replace the handlebars expressions in our template
var playerData = {
title1 : title1,
title2 : title2,
};
$('#player-placeholder').html(playerTemplate(playerData));
});
所以你不要不希望這些任務是異步的? – BlaShadow 2014-08-27 18:27:08
這甚至可能嗎?正如我在第一篇文章中所說的,我認爲更有可能實現的是等待playerData賦值運行,直到標題變量被賦值(等到它們!= null,也許?)。 – user3880485 2014-08-27 18:30:17
這可能是一個解決方案,可以爲你工作。 – BlaShadow 2014-08-27 18:32:25