我已经实现了Web套接字客户端。它侦听服务器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);
}
如果您需要任何其他信息,请告诉我。
请指出如何实现锁。任何帮助都非常感谢。
答案 0 :(得分:0)
您可以在状态中添加一个字段,例如serverCalled: boolean
,从此效果(在从服务器2获取数据之后),您将在第一时间将其更改为true。在通话上方,您始终可以在此“会话”期间从商店检查是否已请求此数据。甚至在示例代码中,您都可以使用选择器订阅存储更改,因此即使在分派此操作之前,您也可以获取该变量的实际值并在有效负载中再传递一个字段,例如shouldLoadData: true | false
,因此实际上只会检查它,也不会或不会拨打该服务。希望它会有所帮助,至少我现在是这样。