Помогите мне, пожалуйста, почему повторная попытка, когда не работает внутри SwitchMap Ngrx Effects? Я делаю чат. Я отправляю данные через socket.io. Если sockect не подключен, я должен повторить все сообщения снова, например, после 1 се c. Но мой код не работает. Его только Retrying...
в журнале. Какая проблема? Может быть, кто-нибудь подскажет мне лучшее решение для повторной отправки сообщений, когда нет соединения sockect.
Вот мой Эффект
@Effect() sendSupportMessage$ = this.actions$.pipe(
ofType(SEND_SUPPORT_MESSAGE),
map((action: CustomAction) => action),
map((action: SendSupportMessage) => action.payload),
switchMap(payload => {
return this.socketService.sendSupportMessage(payload.message).pipe(
map(() => new ChatActions.SendSupportMessageComplete(payload)),
retryWhen(error$ =>
error$.pipe(
delay(1000),
tap((errorStatus: MyError) => {
if (errorStatus.name !== ERROR_SOCKET_NOT_CONNECTED) {
throw errorStatus;
}
console.log("Retrying...");
})
)
),
catchError((error: MyError) => {
return of(new ChatActions.SendSupportMessageError(payload));
})
);
})
);
Вот мои методы сокетов
public sendSupportMessage(data: Message): Observable<void> {
console.log("sendSupportMessage", data);
return this.sendData(data, EVENTS.SUPPORT_MESSAGE);
}
private sendData(data: any, event: EVENTS): Observable<any> {
if (!this.isConnected$.getValue()) {
console.error(ERROR_SOCKET_NOT_CONNECTED, event, data);
const myError: MyError = {
code: 1,
message: ERROR_SOCKET_NOT_CONNECTED,
name: ERROR_SOCKET_NOT_CONNECTED
};
return throwError(myError);
}
return new Observable<any>(observer => {
this.socket.emit(event, data, function(responseData: Result<any>) {
console.log("Data sended", responseData);
if (responseData.success === true) {
observer.next(responseData.data);
observer.complete();
} else {
console.error("Data not sended", responseData);
observer.error(data);
}
});
});
}
Вот мои журналы ![enter image description here](https://i.stack.imgur.com/b7Ssx.png)