在 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');
});
使用 s 数组Promise
将保持与轨道相同的顺序。