В моем приложении Angular я храню массив объектов Message
в объекте Conversation
.
Мне удалось добавить новый Message
в жестко запрограммированном * 1006. * с кодом ниже:
private _conversations = new BehaviorSubject<Conversation[]>([]);
get conversations() {
return this._conversations.asObservable();
}
addMessageToConversation(conversationId: string, message: string) {
return this.conversations.pipe(
take(1),
tap(conversations => {
const updatedConversationIndex = conversations.findIndex(convo => convo.id === conversationId);
const updatedConversations = [...conversations];
const convoToUpdate = updatedConversations[updatedConversationIndex];
convoToUpdate.messages.push(
new Message(
Math.random().toString(),
message,
)
);
this._conversations.next(updatedConversations);
})
);
}
Я внес следующие изменения в этот метод, чтобы я мог обновить объект в базе данных Firebase:
addMessageToConversation(conversationId: string, message: string) {
let updatedConversations: Conversation[];
return this.conversations.pipe(
take(1), switchMap(conversations => {
console.log(conversations);
const updatedConversationIndex = conversations.findIndex(convo => convo.id === conversationId);
updatedConversations = [...conversations];
const convoToUpdate = updatedConversations[updatedConversationIndex];
convoToUpdate.messages.push(
new Message(
Math.random().toString(),
message,
)
);
return this.http.put(
`myUrl/conversations/${conversationId}.json`,
{ ...convoToUpdate, id: null }
);
}), tap(() => {
this._conversations.next(updatedConversations);
})
);
}
Но теперь, когда я вызываю это метод, я получаю эту консольную ошибку:
разговор.FindIndex не является функцией
Эта ошибка связана с этой строкой кода:
const updatedConversationIndex = conversations.findIndex(convo => convo.id === conversationId);
Кроме того, когда я console.log(conversations)
внутри switchMap
, это регистрируется:
{id: "-M52u0Fwdt5a9xE0wwCk", userId: "user3", mechanicId: "user2", messages: Array (1)}
Может кто-нибудь сказать мне, почему это происходит, и какие изменения необходимы, чтобы это работало?