java事件监听器直接写函数,如何选择一个事件监听器,让我等到async.times完成后才能运行一个函数...

我正在使用node.js服务器,Spotify API和spotify-web-api-js节点模块来创建一个Web应用程序,用户可以在其中输入艺术家's name, see a list of songs from related artists, and then optionally save that playlist to their own Spotify account. However, i' m仍然在最后一步遇到问题 .

我的用户授权流程首先发生:

if (params.access_token) {

s.setAccessToken(params.access_token);

s.getMe().then(function(data) {

console.log(data);

console.log(data.id);

user_id = data.id;

下面是API收集歌曲的实际细节的地方 . 尽管它较低,但它首先出现,并且仅当用户单击该页面上的第二个按钮时才会发生用户授权 .

async.times(counter, function(n, next){

s.getArtistTopTracks(relatedArtists[n].id, "US", function (err, data2) {

relatedArtists[n].song = data2.tracks[0].name;

relatedArtists[n].uri = data2.tracks[0].uri;

console.log(relatedArtists[n].uri);

// make sure to put the access token here add song to playlist

// create array

song_uris.push(relatedArtists[n].uri);

console.log(song_uris);

// song_uris = relatedArtists[n].uri;

//

// console.log(song_uris);

next(null);

$("#playlist").load(function() {

s.addTracksToPlaylist(user_id, playlist_id, song_uris);

});

});

}, function(err) {

// console.table(relatedArtists);

for (k = 0; k < 20; k++)

{

$('#related-artist').append('

' + relatedArtists[k].name + ' -- \"' + relatedArtists[k].song + '\"

');

}

(JSBin of full code here,虽然它可能无效,因为我在自己的服务器上使用browserify)

现在,在第114行,我有 song_uris.push(relatedArtists[n].uri); 使用 async.times 将内容推送到数组中 . 由于这是我在第66行创建播放列表的地方,它显示为一个空数组:

s.createPlaylist(user_id, {name: 'Related Artist Playlist'}).then(function(data3) {

console.log(data3);

playlist_id = data3.uri;

playlist_id = playlist_id.substring(33);

console.log(playlist_id);

console.log(song_uris);

});

在那里, console.log(song_uris) 显示一个空数组,所以 addTracksToPlaylist() 像这样断开:

lZ6tB.png

另一方面,如果我尝试下面的 addTracksToPlaylist() ,我不会't have authorization to access the user'的帐户 .

稍后在显示歌曲列表的基本功能已经工作之后添加了用户授权流程,但我不确定如何有效地重构它以便将该列表保存到我的用户的播放列表中 . 目前,我只在Spotify帐户中创建一个空的播放列表 .

我可以添加什么样的事件监听器,以便它等到 async.times 的每个实例都执行,以便 addTracksToPlaylist() 可以工作?在获取此数据之前,DOM已初始加载 . 我看了this question,但它并没有帮我解决这个问题 . 谢谢!

EDIT: 我现在已经按照我需要的方式创建了 song_uri 数组,但我仍然无法将其添加到播放列表中 . 我一直在玩我的访问令牌的位置,以便我可以访问创建的播放列表,但仍然没有运气 .

第130行的 console.log(song_uris); 语句显示了我需要的已完成数组,但当我将其插入 s.addTracksToPlaylist(user_id, playlist_id, song_uris); 时,我在开发人员控制台中收到了以下错误:

POST https://api.spotify.com/v1/users/tenderoni-/playlists/7MtQTzUsxD4IEJ8NmmE36q/tracks?uris= 400 (Bad Request)

bundle.js:10616

Uncaught (in promise) XMLHttpRequest {}

基本上,由于某种原因,它没有收到参数 . 我事先记录了 playlist_id ,所以我可以告诉它有效(同样,我看到在我的Spotify帐户中创建了指定 Headers 的空白播放列表) .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值