我从 Spotify API 获取数据,但过了一会儿 运行 它标记了一个错误并开始一遍又一遍地记录相同的信息

I'm getting data from the Spotify API, but after a while running it marks an error and starts logging the same information over and over

我正在尝试了解 Spotify API。这个小代码控制台记录了用户正在收听的歌曲的当前节拍信息。

它工作正常,但几秒钟后 运行,它会记录一个错误,在该错误之后,它开始一遍又一遍地记录同一节拍的信息。有任何想法吗?这是我的代码,提前谢谢你!

var spotifyApi, spotifyToken;
var current, currentId, timeProgress, beatStart, beatsTotal;
var dataArray = [];
var beatsArray = [];
var spotifyToken = 'token';
spotifyApi = new SpotifyWebApi();
spotifyApi.setAccessToken( spotifyToken );

init();

function init(){
  onReceiveCurrent();
}

function onReceiveCurrent ( err, data ) {
  if (err) {
    console.error(err);
    return;
  }

  spotifyApi.getMyCurrentPlaybackState({}, onReceiveCurrent );
  currentId = data.item.id;
  timeProgress = data.progress_ms;
  spotifyApi.getAudioAnalysisForTrack(currentId, onReceiveAnalysisCallback);
}

function onReceiveAnalysisCallback ( err, data ) {
  if (err) {
    console.error(err);
    return;
  }

  for (var i=0; i<data.beats.length; i++) {
    beatsArray[i] = data.beats[i].start;
  }

  var found = beatsArray.find(function (element) {
        return element >= timeProgress/1000;
  });

  var a = beatsArray.indexOf(found);
  beatStart = data.beats[a];
  console.log(beatStart);
}

这是错误:

您不小心在 onReceiveCurrent 方法中创建了一个无限循环,该方法调用 getMyCurrentPlaybackState,后者具有 onReceiveCurrent 的回调。它一遍又一遍地调用自己,直到达到 Spotify 的限制并且 returns 429。

回调应该是一个单独的函数,如下所示:

function callSpotify () {
  spotifyApi.getMyCurrentPlaybackState({}, onReceiveStateCallback );
}

function onReceiveStateCallback(err, data) {
  if (err) {
    console.error(err);
    return;
  }

  currentId = data.item.id;
  timeProgress = data.progress_ms;
  spotifyApi.getAudioAnalysisForTrack(currentId, onReceiveAnalysisCallback);
}