Я пытаюсь создать простой проигрыватель веб-приложений Apple Music. Я успешно получил небольшой пример работы. Я могу загрузить альбом, песню и т. Д. В очередь музыкального проигрывателя на основе типов и идентификаторов. Я могу проигрывать, приостанавливать, переходить к следующему треку, предыдущему треку и т. Д., Но по какой-то причине, либо когда заканчивается одна песня и начинается следующая (обрабатывается автоматически очередью проигрывателя API), либо я щелкаю, чтобы перейти к следующей дорожке, приостановить и т. Д. он будет делать то, что предполагал, но всплывает с ошибкой.
Пример: я загружаю альбом в очередь. Нажмите кнопку воспроизведения. Он начинает воспроизводить музыку, но иногда он случайно всплывает с сообщением об ошибке, как только он начинает играть, и выводит ошибку на консоль.
Это то, что отображается в консоли разработчика. «Необработанное отклонение обещания: PLAY_ACTIVITY: метод play stop () был вызван без предыдущего дескриптора play ()» https://imgur.com/5MCq08s
Я пытался заставить js приостановить песню перед переключением треков, но это не решило проблему. «Необработанное отклонение обещания: PLAY_ACTIVITY: метод play stop () был вызван без предыдущего дескриптора play ()»
document.addEventListener('musickitloaded', () => {
console.log("musickit loaded :D")
// MusicKit global is now defined
fetch('/token').then(response => response.json()).then(res => {
/***
Configure our MusicKit instance with the signed token from server, returns a configured MusicKit Instance
https://developer.apple.com/documentation/musickitjs/musickit/musickitinstance
***/
const music = MusicKit.configure({
developerToken: res.token,
app: {
name: 'AppleMusicCS115',
build: '0.0.1'
},
declarativeMarkup: true
});
// setup click handlers
document.getElementById('add-to-q-btn').addEventListener('click', () => {
const idInput = document.getElementById('id-input');
const typeInput = document.getElementById('type-input');
/***
Add an item to the playback queue
https://developer.apple.com/documentation/musickitjs/musickit/musickitinstance/2992716-setqueue
***/
music.setQueue({
[typeInput.value]: idInput.value
});
// set fields back to blank fields
idInput.value = '';
typeInput.value = '';
});
document.getElementById('play-btn').addEventListener('click', () => {
/***
Resume or start playback of media item
https://developer.apple.com/documentation/musickitjs/musickit/musickitinstance/2992709-play
***/
music.authorize().then(function() {
music.play();
});// added then function
});
document.getElementById('pause-btn').addEventListener('click', () => {
/***
Pause playback of media item
https://developer.apple.com/documentation/musickitjs/musickit/musickitinstance/2992708-pause
***/
music.authorize().then(function() {
music.pause();
});// added then function
});
document.getElementById('next-trk-btn').addEventListener('click', () => {
/***
* Skip to next item in queue.
* https://developer.apple.com/documentation/musickitjs/musickit/player/2992772-skiptonextitem
*/
music.authorize().then(function() {
music.skipToNextItem();
});// added then function
});
document.getElementById('prev-trk-btn').addEventListener('click', () => {
/***
* https://developer.apple.com/documentation/musickitjs/musickit/player/2992773-skiptopreviousitem
*/
music.authorize().then(function() {
music.pause();;
});
music.authorize().then(function() {
music.skipToPreviousItem();;
});// added then function
})
</head>
<body>
<label>Type (eg 'album' 'song')</label>
<input id="type-input" type="text" value="album">
<br>
<label>id</label>
<input id="id-input" type="text" value="1462319084">
<br>
<button id="add-to-q-btn">Add to Queue</button>
<br>
<hr>
<button id="prev-trk-btn">Prev Track</button>
<button id="play-btn">Play</button>
<button id="pause-btn">Pause</button>
<button id="next-trk-btn">Next Track</button>
<button id="login-btn">Login to Apple Music</button>
<br>
Я ожидаю, что он будет переключать песни, воспроизводить, приостанавливать и т. Д., Не показывая никаких всплывающих ошибок. Может быть, как-то обработать эти исключения?
Консольный вывод:
Необработанный отказ от обещания:
PLAY_ACTIVITY: метод play stop () был вызван без предыдущего дескриптора play ()
(анонимная функция) - musickit.js: 1: 14539
отклонено - musickit.js: 534
promiseReactionJob