为什么retryWhen在switchMap中不起作用(Ngrx Effects rxjs)

问题描述 投票:2回答:1

[请帮帮我,为什么retryWhen在switchMap Ngrx Effects中不起作用?我聊天。我通过socket.io发送数据。如果未连接sockect,我将如何重试所有消息,例如1秒钟后。但是我的代码不起作用。它是日志中唯一的Retrying...。怎么了也许有人告诉我最好的解决方案,以便在没有对接连接时重新发送邮件。

这是我的效果

 @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

angular rxjs ngrx ngrx-effects
1个回答
0
投票

您可以从here中学习,或尝试此example

© www.soinside.com 2019 - 2024. All rights reserved.