Angular 5,如何为http调用设置锁定

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

我有web socket客户端的实现。它侦听服务器1的响应。一旦客户端从服务器1接收到响应,它就通过http连接到另一个服务器2以获取对象。我正在寻找同步调用服务器2.有人可以指点我,这怎么可以实现?

示例代码:这是客户端侦听服务器1的位置。

this.chatSubscription = this.stompClient.subscribe("/chat/" + id, (message) => {
  console.log(message.body);
  this.store.dispatch(new NotificationActions.TryNotificationsList({
    url: this.utilService.host + 'message'
  }));
});

效果代码:这是客户端通过http连接到服务器2以获取对象的位置。这是我试图锁定的地方,以便只有一个请求设置到服务器2。

@Effect({
  dispatch: false
})
actionTryNotificationsList = this.actions$
  .ofType(NotificationActions.TRY_NOTIFICATIONS_LIST)
  .switchMap((actions: NotificationActions.TryNotificationsList) => {
      const data = actions.payload;
      return this.requestsService.getRequest(data.url)
        .pipe(catchError(this.requestsService.handleError < any > ('Unable to connect to server')))
        .map((response: any) => {

            if (response instanceof HttpResponse) {
              if (response) {
                this.displayNotificationService.notificationsList$.next(notificationsList);
              }
          }
         }

getRequest函数的代码:

                getRequest(url: string) {
                  const tkn = this.cookieService.get("token");
                  const httpOptions = {
                    observe: 'body',
                    responseType: 'json',
                    headers: new HttpHeaders({
                      'token': tkn,
                      'Content-Type': 'text/plain'
                    })
                  };
                  const req = new HttpRequest("GET", url, httpOptions);
                  return this.httpClient.request(req);
                }

如果您需要任何其他信息,请与我们联系。

请指出我如何实现锁定。任何帮助都非常感谢。

angular asynchronous synchronization angular-httpclient
1个回答
0
投票

您可以向状态添加一个字段,例如serverCalled: boolean,您将在第一次从此效果(从服务器2获取数​​据后)更改为true。在通话之上,您可以随时检查您是否在此会话期间从您的商店请求了此数据。或者甚至在您的示例代码中,您可以使用选择器订阅商店的更改,因此即使在调度此操作之前,您也可以获取该变量的实际值并在有效负载中传递一个以上字段,例如shouldLoadData: true | false,因此实际上您只会检查它将会或不会对服务进行调用。希望它有所帮助,至少这是我现在看到的方式。

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