2015-11-08 2 views
1

Вот код:Javascript - асинхронные операции с SoundCloud API

var holder; 
var findSong; 
var embedHolder; 


$(".hypemList ol").on('click','li',function(){ 

    holder = $(this).text(); 
    findSong = SC.get('/tracks', { q: holder }); 
    embedHolder = findSong._result[0].uri; 
    SC.oEmbed(embedHolder // song to embed 
     , { color: "ff0066" 
     , auto_play: false 
     , maxwidth: 500 
     , maxheight: 1000 
     , show_comments: true // options 
    , element: document.getElementById("soundTest") // what element to attach player to 
    }); 

}); 

То, что я хотел бы случиться:

У меня есть список песен, которые я хотел бы играть. Когда я нажимаю на песню, я возьму эту строку и затем буду искать soundcloud API, используя эту строку. Я возьму индекс 0 результата и поставлю его в SC.oEmbed, чтобы воспроизвести эту песню.

Когда я открываю Dev консоль, я получаю эту ошибку, когда я нажимаю на песню -

Uncaught TypeError: Cannot read property '_result' of undefined.

Я считаю, что нужно ждать findSong, чтобы закончить, а затем я могу использовать embedHolder и место, что в SC.oEmbed ,

То, что я сделал:

Я нашел это: returning array from function in javascript. Я пробовал следить за тем, что они сделали, но, похоже, это не сработало.

Буду признателен, если кто-то может указать мне в правильном направлении, что делать дальше.

ответ

0

SC.get() имеет 3 параметра: путь, параметры и обратный вызов. Обратный вызов - это функция, которая будет вызываться один раз SC.get. Обратный вызов в этом случае принимает массив результатов в качестве параметра. Использование обратного вызова в вашем коде будет выглядеть так:

SC.get('/tracks', { q: holder }, function(tracks){ 
     embedHolder = tracks[0].uri; 
     SC.oEmbed(embedHolder // song to embed 
      , { color: "ff0066" 
      , auto_play: false 
      , maxwidth: 500 
      , maxheight: 1000 
      , show_comments: true // options 
     , element: document.getElementById("soundTest") // what element to attach  player to 
     }); 

}); 

Надеюсь, это поможет!

Смежные вопросы