2013-06-02 56 views
0

我正在用node-webkit製作一個小型的YouTube應用程序,但我不是JavaScript的高手。以相同的順序在我的播放列表中加載JSON項目

我有一些來自gdata響應的JSON對象,並且具有特定順序的項目,總是相同的。我可以加載我的播放列表中的所有內容,但無法保持與JSON對象相同的順序。

我不明白同步/異步調用。

這裏是我的代碼:http://pastebin.com/hM72T6rT

我怎麼能做到這一點與我的for循環,讓我得到了相同的順序我的JSON加載的所有項目?

的功能是在爲了我想:

function searchVideos(user_search){ 
    try{ 
     $('#items_container').empty(); 
     youtube.feeds.videos({ 
       q:    ''+user_search+'', 
       'start-index' : ''+current_start_index+'', 
       'max-results': 25, 
       orderby:  'relevance' 
      }, 
      function(err, data) { 
      if(err instanceof Error) { 
       console.log(err) 
      } else { 
       items=data.items 
       current_prev_start_index=current_start_index; 
       if (current_page == 1){ 
        $('.back').css({'display':'None'}); 
       } else { 
        $('.back').css({'display':'block'}); 
        $('.next').css({'display':'block'}); 
       } 
       if (items.length < 25) { 
        $('.next').css({'display':'None'}); 
       } 
       for(var i=0; i<items.length; i++) { 
        video_loaded = false; 
        truc = function() { getVideoInfos('http://www.youtube.com/watch?v='+items[i].id) }(i); 
       } 
      } 
     }); 
    }catch(err){ 
     console.log('searchVideos err: '+err) 
    } 
} 

function getVideoInfos(video_link){ 
    try { 
     ytdl.getInfo(video_link, function(err,info){ 
      if(err) { 
       console.log(err); 
      } else { 
       printVideoInfos(info); 
      } 
     }); 
    } catch(err) { 
     console.log('getVideoInfos err: '+ err); 
    } 
} 

function printVideoInfos(infos){ 
    try{ 
     var title = infos.title; 
     var thumb = infos.thumbnail_url; 
     var vid = infos.video_id; 
     $('#items_container').append('<div class="youtube_item"><img src="'+thumb+'" style="float:left;"/><p><b>'+title+'</b></p><div id="youtube_entry_res_'+vid+'"></div></div>'); 
     //console.log(infos); 
     var num=infos.formats.length; 
     if (parseInt(num) == 0) { 
       return; 
     } 
     var resolutions = new Array([]); 
     for(var i=0; i<num; i++) { 
      var vlink = infos.formats[i].url; 
      var resolution = infos.formats[i].resolution; 
      var resolution_full = infos.fmt_list[i][1]; 
      var container = infos.formats[i].container; 
      // if resolution is alreay available in webm continue... 
      if ($.inArray(resolution, resolutions) > -1) { 
       continue; 
      } 
      resolutions.push(resolution); 
      if (container == 'flv' || container == '3gp') { 
       continue; 
      } 
      var img=''; 
      if (resolution == "720p" || resolution == "1080p") { 
       img='images/hd.png'; 
      } else { 
       img='images/sd.png'; 
      } 
      $('#youtube_entry_res_'+vid).append('<div class="resolutions_container"><a class="video_link" href="'+vlink+'" alt="'+resolution+'"><img src="'+img+'" class="resolution_img" /><span>'+ resolution+'</span></a><a href="'+vlink+'" title="'+title+'.'+container+'" class="download_file"><img src="images/down_arrow.png" /></a></div>'); 
     } 
     if ($('#youtube_entry_res_'+vid+' div a.video_link').length == 0){ 
      $('#youtube_entry_res_'+vid).parent().remove(); 
     } 
    } catch(err){ 
     console.log('printVideoInfos err: '+); 
    } 
} 

回答

0

,讓他們一切爲了,你將要使用的async module,擡頭望async.series功能,它應該幫助你。那會按照你給它的順序執行所有的事情。

相關問題