понимаю тут одну вещь. на ноде у меня запускается функция artistsProcessing, ее задача обработать данные по артисту(артист это музыкант, композитор), мне нужно либо дупустить артиста до добавления его треков до плейлиста, либо скипнуть его после применения нескольких фильтров. вот как красиво сделать последовательное применение моих фильтров к нему, что-то не придумал никак. делаю так пока-что:
async function artistsProcessing(){
let artistData = await getNextArtist()
artistData = filterArtists.filterByYandexMusicUsersLiked(artistData)
if(!artistData) {
stopCurrentArtistProcessing()
return
}
artistData = filterArtists.filterByYandexMusicGenres(artistData)
if (!artistData) {
stopCurrentArtistProcessing()
return
}
artistData = filterArtists.filterByListenedTracks(artistData, listenedTracksController)
if(!artistData) {
stopCurrentArtistProcessing()
return
}
artistData = await filterArtists.filterByLastFmGenres(artistData)
if(!artistData) {
stopCurrentArtistProcessing()
return
}
await addTracksToYandexMusic(artistData.notListenedTracksWithAlbums)
stopCurrentArtistProcessing()
return
} я тупо передаю данные по артисту в фильтр, если артист фильтр не проходит, то возвращает null. но эти проверки if(!artistData) реально смущают, как-то покрасивее может можно?
const artistFilterSteps = [ artistFilters.byYandexMusicUsersLiked, artistFilters.byYandexMusicGenres, artistFilters.byListenedTracks, artistFilters.byLastFmGenres ] async function filterArtist(artist) { let current = artist for (let filter of artistFilterSteps) { current = await filter(current) if (!current) { return null } } return current }
Обсуждают сегодня