TypeError: Cannot read property 'id' of null (строка 1395, файл Library)
Sairon92 opened this issue · 4 comments
При выполнении скрипта, словил ошибку:
TypeError: Cannot read property 'id' of null
at unknown function
at cacheToFullObj(Library:1382:22)
at cache(Library:1352:9)
at getCache(Library:1343:9)
at rangeTracks(Library:596:29)
at createMySlowFlow(Main:113:10)
При выполнении скрипта без фрагмента кода фильтрации по энергии трека всё работает:
Filter.rangeTracks(Flow, {
features: {
energy: { min: 0.0, max: 0.5 },
}
});
Сам скрипт:
function createMySlowFlow() {
let Flow = Source.getTracks([
{ name: 'Jam', id: '123'}
]);
let SavedTracks = Source.getSavedTracks();
let BigMix = Source.getTracks([
{ name: 'BigMix by Goofy', id: '123'}
]);
let RsntHistoryTracks = Source.getTracks([
{ name: 'History by Goofy', id: '123'}
]);
let Ban = Source.getTracks([
{ name: 'Ban', id: '123'}
]);
//Flow
Filter.removeTracks(Flow, SavedTracks);
Filter.removeTracks(Flow, RsntHistoryTracks);
Filter.removeArtists(Flow, Ban);
Filter.rangeTracks(Flow, {
features: {
energy: { min: 0.0, max: 0.5 },
}
});
Filter.dedupArtists(Flow);
Selector.keepRandom(Flow, 100);
Order.shuffle(Flow);
console.log('Количество треков Flow', Flow.length);
//BigMix
Filter.removeTracks(BigMix, Flow);
Filter.rangeTracks(BigMix, {
features: {
energy: { min: 0.0, max: 0.5 },
}
});
Filter.dedupArtists(BigMix);
Selector.keepRandom(BigMix, 100);
Order.shuffle(BigMix);
console.log('Количество треков BigMix', BigMix.length);
//BigMix+Flow
let BigMixFlow = Combiner.mixin(Flow, BigMix, 1, 1, true);
//+MySave
Filter.removeTracks(SavedTracks, RsntHistoryTracks);
Order.shuffle(SavedTracks);
Filter.rangeTracks(SavedTracks, {
features: {
energy: { min: 0.0, max: 0.5 },
}
});
Filter.dedupArtists(SavedTracks);
Selector.keepRandom(SavedTracks, 100)
console.log('Количество треков MySave', SavedTracks.length);
//BigMixFlow+MySave
let BigMixFlowSave = Combiner.mixin(BigMixFlow, SavedTracks, 1, 1, true);
let UpdTime = new Date();
Playlist.saveWithReplace({
id: '123',
name: 'My Slow Flow by Goofy',
description: UpdTime,
tracks: BigMixFlowSave,
});
console.log('Число запросов', Request.getCountRequest());
}
Не удается воспроизвести ошибку. Дайте id плейлиста, треки которого попадают в переменную Flow.
Код с фильтром по Energy для примера. Который у меня выдает ошибку. Goofy 01.12.2020 вечером
function Filtr() {
let Flow = Source.getTracks([
{ name: 'Jam', id: '48CK3DJea8l18MBTnNOcWQ'}
]);
Filter.rangeTracks(Flow, {
features: {
energy: { min: 0.0, max: 0.5 },
}
});
console.log('Количество треков', Flow.length);
}
Среди треков плейлиста (id = 48CK3DJea8l18MBTnNOcWQ) есть трек (id = 40jbQpNvRIFpV1i9UTcNgB), для которого Spotify не дает данных для фильтрации. Можно посмотреть в консоле. В следствии чего, в получаемом ответе нет id трека. Поэтому появляется ошибка при кэшировании Cannot read property 'id' of null
.
Ответ Spotify:
"error": {
"status": 404,
"message": "analysis not found"
}
Среди 5 618 треков плейлиста, трек с такой ошибкой один. Поэтому это редкий случай, который не удавалось воспроизвести. Исправил ошибку путем добавления условия проверки. При этом, треки такого рода будут отбрасываться не зависимо от параметров фильтрации.
Обновите библиотеку на своей стороне (как это сделать) и отпишитесь о результате. На моей стороне контрольный пример работает без ошибок и дает на выходе 1150 треков.
Всё заработало. Спасибо.