Ниже приведен метод onSendMessage()
в моем приложении Angular:
onSendMessage() {
this.conversationsService.addConversation(this.form.value.message).subscribe(() => {
this.router.navigateByUrl('conversation-list');
});
});
}
Этот метод принимает сообщение, введенное пользователем, и создает запись в firebase перед перенаправлением пользователя.
Раньше это работало нормально, но я внес некоторые изменения в метод ConversationsService.addConversation()
ниже.
Теперь, когда я пытаюсь скомпилировать свой код, я получаю эту ошибку терминала:
Свойство «подписка» не существует для типа «void»
Вот это ConversationsService.addConversation()
:
addConversation(message: string) {
let generatedId;
let newConversation: Conversation;
this.authService.userId.pipe(
take(1),
switchMap(userId => {
newConversation = new Conversation(
Math.random().toString(),
userId,
[new Message(
Math.random().toString(),
)]
);
return this.http.post<{ name: string }>(
'firebaseUrl/conversations.json',
{ ...newConversation, id: null }
);
}),
switchMap(resData => {
generatedId = resData.name;
return this.conversations;
}),
take(1),
tap(conversations => {
newConversation.id = generatedId;
this._conversations.next(conversations.concat(newConversation));
})
);
}
Может кто-нибудь подскажите, пожалуйста, какие изменения необходимо внести на onSendMessage()
, чтобы этот метод снова работал как ожидалось?
Кроме того, вот код AuthService
, где я получаю userId
:
private _user = new BehaviorSubject<User>(null);
get userId() {
return this._user.asObservable().pipe(
map(user => {
if (user) {
return user.id
} else {
return null;
}
})
);
}