我目前正在尝试将Spotify应用程序迁移到api的新1.0版本。
我遇到搜索问题。我想用搜索字符串搜索目录,并从搜索结果中获取所有曲目信息,艺术家姓名和专辑名称。但是,搜索似乎不包括结果中的专辑名称(仅限URI:s)。
之后我是否必须异步加载所有结果曲目的所有专辑名称?如果可能,我想避免这种情况。
我正在寻找这样的
var search = Search.search(searchString);
search.tracks.snapshot().done(function(snapshot) {
var results = snapshot.toArray();
// no album names in the results tracks
}).fail(function() {
console.error('Error retrieving snapshot');
});
答案 0 :(得分:1)
在API 1.0中,不会自动检索某些数据。这意味着,理想情况下,您只需获取所需数据,减少数据流量并提高性能。缺点是您需要自己编写轨道数组和专辑名称,以异步方式获取数据。
对于您想要获取其专辑名称的每首曲目。这就是你要做的事情:
var maxTracks = 15;
var search = Search.search(searchString);
search.tracks.snapshot(0, maxTracks).done(function(snapshot) {
snapshot.toArray().forEach(function(result) {
result.album.load('name').done(function(album) {
// here you have access to the album.name attribute
});
});
}).fail(function() {
console.error('Error retrieving snapshot');
});
这种方法的问题在于,您将使数据的顺序与轨道出现的顺序不同。如果您需要保留订单,可以使用Promise
对象:
var maxTracks = 15;
var search = Search.search(searchString);
search.tracks.snapshot(0, maxTracks).done(function(snapshot) {
var promises = [];
snapshot.toArray().forEach(function(result) {
promises.push(result.album.load('name'));
});
models.Promise.join(promises)
.done(function(albums) { console.log('Loaded all albums.', albums); })
.fail(function(albums) { console.log('Failed to load at least one album.', albums); });
}).fail(function() {
console.error('Error retrieving snapshot');
});
使用Promise
s数组将保持与曲目相同的顺序。