如何将 Soundcloud API SDK 3.0 on(finish, handler) 方法附加到我的 Play 函数?

How do I attach the Soundcloud API SDK 3.0 on(finish, handler) method to my Play function?

我没有看到任何关于如何使用当前版本的 SoundCloud JS sdk 的 on(event, handler) 方法的答案。

关于如何将它附加到我的播放功能有什么想法吗?我希望它在当前歌曲结束时播放下一首歌曲。这是我的播放功能:

  $scope.play = function(id) {
    soundcloud.stream(id).then(function(player) {
      $scope.player = player;
      $scope.player.play();
    });
    $scope.isPlaying = id;
  };

我已经有一个可以调用的 stepForward 函数,例如 on(finish, $scope.StepForward());,但是没有说明我会把它放在文档中的什么地方:https://developers.soundcloud.com/docs/api/sdks#streaming

我对这个特别的东西没有很好的经验 API,所以这更像是一个评论,但我没有业力留下一个。它在那些文档中说 on(event, handler) 是播放器的一个函数,所以我认为您应该能够在设置播放器时设置该事件侦听器。尝试在 $scope.player.play() 行之后添加它。

$scope.player.on('finished', $scope.StepForward);

此外,您实际上不应该在 .on() 中调用处理函数,您只需传递该函数,它会在事件发生时被调用。

我在此处发表的评论中找到了答案:

问题实际上是关于 SDK 2.0,但评论是我对 SDK 3.0 问题的回答。

$scope.player.on('finish' function() {
  $scope.stepForward();
  $scope.$apply; // in my case, this updates a variable, $scope.isPlaying, to the DOM
});

我想我已经习惯了将其称为回调而不是处理程序。现在我知道处理程序是一种回调。

我使用以下位于函数 loadAndUpdate 中的代码:

player.addEventListener('ended', function () {

    var nextCount = 1;
    nextTrack(nextCount);

    function nextTrack(nextCount) {
        QueueControl('forward', function () {
            if (typeof playList[playTrack] == 'undefined') {
                writeHistory('player ended ' + nextCount + ': playList[playTrack] == "undefined"');
                nextTrack(nextCount + 1);
            } else {
                loadAndUpdate(playList[playTrack], loader, audioSource, player, cpUpdate);
            }
        });
    }
});

'undefined' 检查是对 CORS 问题的修复,我选择了 25% 的文件,所以代码只是 ping 到列表中的下一个轨道。它在我的修复列表中...