我有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);
}
如果您需要任何其他信息,请与我们联系。
请指出我如何实现锁定。任何帮助都非常感谢。
您可以向状态添加一个字段,例如serverCalled: boolean
,您将在第一次从此效果(从服务器2获取数据后)更改为true。在通话之上,您可以随时检查您是否在此会话期间从您的商店请求了此数据。或者甚至在您的示例代码中,您可以使用选择器订阅商店的更改,因此即使在调度此操作之前,您也可以获取该变量的实际值并在有效负载中传递一个以上字段,例如shouldLoadData: true | false
,因此实际上您只会检查它将会或不会对服务进行调用。希望它有所帮助,至少这是我现在看到的方式。