# #angular #typescript #firebase #google-cloud-firestore
#угловой #машинописный текст #огневая база #google-облако-firestore
Вопрос:
Если вопрос не ясен, позвольте мне объяснить ситуацию как можно лучше.
У меня есть следующий код:
initFunc(appUser: AppUser) { (this.userkey = appUser.email), (this.username = appUser.name), (this.subscription = this.musicService .getAll() .valueChanges({ idField: 'key', }) .subscribe((music: any) =gt; { this.filteredMusic = this.music = music.map((music: any) =gt; { return { songname: music['songname'], genre: music['genre'], artistkey: music['artistkey'], artist: music['artist'], key: music['key'], inplaylist: this.rode(music['key'], this.userkey), }; }); this.dataSource = new MatTableDataSourcelt;Musicgt;(this.filteredMusic); this.initPaginatorAndSort(); })); }
Этот код получает все музыкальные данные и помещает их в список музыки. В возврате я определяю атрибуты, и это работает, за исключением inplaylist
атрибута.
Этот атрибут должен быть заполнен на основе другой таблицы. У меня есть таблица для списков воспроизведения, которая содержит музыку. Когда вы войдете в систему, вы сможете добавлять песни в свой плейлист в таблице. Все это работает, но я не могу add to collection
отключить кнопку после добавления песни, так как мне нужно проверить, есть ли песня уже в списке воспроизведения.
за rode
это отвечает метод. Он берет ключ песни в таблице и текущего пользователя. Этот метод выглядит следующим образом:
rode(songId: string, userId: string): any { this.subscription2 = this.playlistService .getAllByStatus(userId, songId) .get() .subscribe((result: any) =gt; { console.log(result.size ' : ' userId ' - ' songId); if (result.size lt;= 0) return false; return true; }); }
Этот метод вызывает метод в playlistService
. Он будет искать в списке воспроизведения вошедшего в систему пользователя и получать результаты, если идентификатор песни совпадает. Если результат не содержит каких-либо элементов, он вернет значение false, в противном случае он вернет значение true. Я могу добавить это логическое значение в свои данные, чтобы включить/отключить add to collection
кнопку в таблице.
Когда я запускаю код, inplaylist
атрибут заполняется неправильно. Сначала я подумал, что это потому, что запрос был неправильным, но это было не так. Журнал консоли, который вы можете видеть в rode
методе, регистрирует все правильно для каждого элемента в таблице.
Я думаю, что это как-то связано с тем фактом, что rode
метод выполняется после initFunc
того, как он уже завершен. Когда я регистрирую что-то в initFunc
методе, оно всегда отображается первым в консоли.
Я не знаю, как я могу заставить это работать. Я не могу завернуть метод initFunc
внутрь rode
, так rode
как метод зависит от атрибута идентификатора песни.
Если есть другие способы сделать это, дайте мне знать. Дайте мне знать, если вам понадобится дополнительная информация.
Комментарии:
1. Если вы используете функцию async-await для rode, это будет полезно.