我正在使用这个LastFM包装器插件(https://github.com/fxb/javascript-last.fm-api)。我想要做的是在成功函数之后返回结果。
var getTopTracks = function(){
var last_fm;
last_fm = new LastFM({
apiKey : //apikey,
apiSecret : //apiSecret
});
last_fm.user.getTopTracks({
user : //lastfm username
period : //track period
limit : //track count
}, {
success: function( data ){
var track_arr;
track_arr = data.toptracks.track;
// HOW DO I RETURN THE TRACKARRAY TO USE LATER??
},
error: function( code, message ){}
});
};
// I would like to do something like
// that would output the results (track_array) from the success function inside getTopTracks
var result = getTopTracks();
//编辑
最终我想做的是:
1)遍历用户名数组
2)获取每个lastFM用户名(这是一个数组)的顶部曲目
3)将每个数组中的所有项组合成一个新数组
4)输出到DOM
var user_list = [
// array of last fm usernames
];
var getTopTracks = function( user, callback ){
var last_fm;
last_fm = new LastFM({
apiKey : //apikey,
apiSecret : //apiSecret
});
last_fm.user.getTopTracks({
user : user
period : //track period
limit : //track count
}, {
success: function( data ){
var track_arr;
track_arr = data.toptracks.track;
callback( track_arr );
// HOW DO I RETURN THE TRACKARRAY TO USE LATER??
},
error: function( code, message ){}
});
};
for (var i = 0; i < user_list.length; i++) {
getTopTracks(user_list[i], function( data ){
console.log( data );
});
}
如何遍历用户名数组,为每个用户运行getTopTracks函数,然后在完成加载后将结果合并到一个新数组中?
答案 0 :(得分:0)
它是一个异步调用,所以它不会像那样工作。您需要使用回调函数:
success: function( data ){
var track_arr;
track_arr = data.toptracks.track;
callback(track_arr);
},
function callback(arr) {
console.log(arr); //there it is, now do stuff!
}
或者,使用匿名函数:
var getTopTracks = function(callback) {
..
..
success: function( data ){
var track_arr;
track_arr = data.toptracks.track;
callback(track_arr);
},
现在调用它并传入一个匿名函数
getTopTracks(function(data) {
console.log(data); //there it is again! do stuff!
});
答案 1 :(得分:0)
简短的回答是:你没有。
这是一个回调函数,因此您要执行的任何处理都必须在回调中完成,否则回调必须调用另一个回调函数,并将其结果作为参数传递。
success: function( data ){
var track_arr;
track_arr = data.toptracks.track;
doSomethingAwesomeWithResults(track_arr);
},
然后,在API调用之外定义:
function doSomethingAwesomeWithResults(track_arr) {
//your custom logic here
}