从事件监听器中保存值
Saving Value from Event Listener
我在设计代码时遇到问题。
我正在制作一个前端服务,该服务访问 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() 函数在我的 playTrackService 中需要 device_id 但我不知道如何从事件侦听器中保存它。我需要将它保存在我的应用程序中,以便我可以随时调用 playTrack() 方法。
您可以创建一个 Subject 实例并在触发就绪事件时发出它。
订阅 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);
});
})();
}
我在设计代码时遇到问题。
我正在制作一个前端服务,该服务访问 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() 函数在我的 playTrackService 中需要 device_id 但我不知道如何从事件侦听器中保存它。我需要将它保存在我的应用程序中,以便我可以随时调用 playTrack() 方法。
您可以创建一个 Subject 实例并在触发就绪事件时发出它。
订阅 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);
});
})();
}