Chimildic/goofy

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 треков.

Всё заработало. Спасибо.