Javascript - 使用 soundcloud API 进行异步操作

标签 javascript callback closures soundcloud

代码如下:

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 中来播放歌曲。

当我打开开发控制台时,单击歌曲时出现此错误 -

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

我相信我需要等待 findSong 完成,然后我可以使用 embedHolder 并将其放入 SC.oEmbed 中。

我做了什么:

我发现了这个:returning array from function in javascript 。我尝试按照他们的做法进行操作,但似乎没有效果。

如果有人能够为我指明下一步该做什么的正确方向,我将不胜感激。

最佳答案

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
      });

});

希望对你有帮助!

关于Javascript - 使用 soundcloud API 进行异步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33597055/

相关文章:

Javascript 闭包和 'this'

jquery - 如何在 jQuery 点击函数中存储局部变量?

Ruby Pascal 的带内存的三角形生成器

javascript - 多行输入框值相加求和

javascript - 验证多组两个单选按钮

javascript - 在 GridView 的分页回调后执行 JavaScript

javascript - 在 zingChart.render() 之后调用回调函数

c - 如何在 Mingw 中将 C 程序编译为 dll 以与 Inno 设置和回调一起使用

c# - 传递实体,从 View 到 Controller

javascript - 使用 jquery 完成单独功能时执行警报