javascript - 从事件监听器中保存价值
问题描述
我在构建代码的方式上存在问题。
我正在制作一个访问 Spotify WebPlaybackSDK 以通过我的浏览器播放音乐的前端服务。使用它的方法是从我的前端连接到 sdk,然后从 Spotify 调用 API,告诉它使用访问令牌、设备 ID 和跟踪 uri 从设备播放歌曲。
我的问题是,我没有同步方法来保存 Spotify 播放器应该返回给我的设备 ID,因为它是通过事件侦听器完成的。下面是 ngOnInit() 方法下的一些代码。
(async() => {
const { Player } = await this.playbackService.loadPlaybackPlayer();
const sdk = new Player({
name: "Web Playback SDK",
volume: 1.0,
getOAuthToken: callback => { callback(access_token); }
});
this.playbackService.connectPlayer(sdk);
sdk.addListener('ready', ({device_id}) => {
})
})();
我的播放服务中有一个 playTrack() 函数,它需要 device_id,但我不知道如何从事件侦听器中保存它。我需要将它保存在我的应用程序中,以便我可以随时调用 playTrack() 方法。
解决方案
您可以创建一个 Subject 实例并在触发 ready 事件时发出它。
订阅OnMusicReady
并获取 device_id。
device_id;
OnMusicReady = new Subject();
ngOnInit() {
this.OnMusicReady.subscribe(device_id => {
console.log('Device ID: ' + device_id);
this.device_id = device_id;
// Perform additional logic here.
});
this.initSpotify();
}
initSpotify() {
(async () => {
const { Player } = await this.playbackService.loadPlaybackPlayer();
const sdk = new Player({
name: 'Web Playback SDK',
volume: 1.0,
getOAuthToken: callback => {
callback(access_token);
}
});
this.playbackService.connectPlayer(sdk);
sdk.addListener('ready', ({ device_id }) => {
// Store device_id in the class variable.
this.OnMusicReady.next(device_id);
});
})();
}
推荐阅读
- html - 使用引导程序将两个表放在 html 中
- amazon-web-services - 如何在没有名称的情况下将文件上传到 S3
- c++ - libtorch 中 numpy.spacing(1) 的等价物是什么?
- android - 尝试从 JSON 文件的最后一个条目检索数据时出错
- javascript - 如何从反应数组返回中删除双引号?
- javascript - 使用Javascript根据值更改表数据值颜色
- google-cloud-platform - 如何使用谷歌云视频智能名人识别?
- algorithm - 修改归并排序以计算反转次数
- javascript - 成功将文件上传到MySQL中的字节数组,但是下载时内容不可读
- json - 如何将 json 数据关联到颤振列表?