等待spotify app api搜索完成[关闭]

时间:2013-02-26 13:33:43

标签: javascript spotify

更新:新的预览API为此提供了一个简单的解决方案!

好的我遇到了新Spotify预览api 1.x的问题。而且它是一般的javascript / jquery ajax问题。

我有一个从我的服务器后端获取json数组的函数。该数组代表一些由音乐曲目(名称,艺术家)组成的推荐。完成后我想通过spotify api搜索这些曲目。

 $.when(getCurrentRecommendationList()).done(function(result) {
            console.log(result);
            matchRecommendations(result, showTracksList);
        });

到目前为止一切顺利。我的匹配建议功能看起来像这样:

var matchedTracks = [];
for ( var i = 0; i < result.length; i++) {
    var searchTerm = result[i].song.artist + " " + result[i].song.name;
    var track;

    // Search with SPOTIFY API
    require([ '$api/search#Search' ], function(Search) {
        var search = Search.search(searchTerm);
        search.tracks.snapshot(0, 1).done(function(snapshot) {
        track = snapshot.get(0);
            if (track) {
                var rec = new Recommendation(result[i].id, track);
                matchedTracks.push(rec);
            }
        });
    });
}
return matchedTracks;

不要担心搜索所有工作正常。问题是搜索需要一些时间,并且在搜索完成之前返回匹配的跟踪。

我认为jquery的推迟将是解决方案,但由于我是javascript和jquery的新手,我无法让它们以我想要的方式工作,主要是因为循环给了我麻烦^^。

有什么想法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

Javascript想要异步,所以不要从方法中返回曲目,使用完成的回调。

matchRecommendations(result, showTracksList, function(matchedTracks) {
    console.log("tracks finished", matchedTracks);
});



function matchRecommendations(result, showTracksList, matchedTracksCallback) {
    var matchedTracks = [];
    for ( var i = 0; i < result.length; i++) {
        var searchTerm = result[i].song.artist + " " + result[i].song.name;
        var track;

        // Search with SPOTIFY API
        require([ '$api/search#Search' ], function(Search) {
            var search = Search.search(searchTerm);
            search.tracks.snapshot(0, 1).done(function(snapshot) {
            track = snapshot.get(0);
                if (track) {
                    var rec = new Recommendation(result[i].id, track);
                    matchedTracks.push(rec);
                }
            });

            // Call the callback after all tracks are added
            matchedTracksCallback(matchedTracks);
        });
    }

    // don't return anything here
    // return matchedTracks;
}

我不熟悉spotify api知道何时调用回调,但是......