在Angular中使用websocket发布api调用不起作用

Posted

技术标签:

【中文标题】在Angular中使用websocket发布api调用不起作用【英文标题】:post api call using websocket in Angular not working 【发布时间】:2021-03-31 04:41:33 【问题描述】:

我正在构建一个示例应用程序,在该应用程序中我正在执行 post api 调用。主要目标是使用 POST api 调用发送查询,该调用作为响应提供来自 api 的数据。这个 api 的主要特点是每 1 分钟(连续)提供更新的数据。

问题:主要问题是 api 显示特定时间实例的更新数据(例如:16:30 PM),但在一两分钟后查看更新数据(例如: 16:32 PM),我每次都必须刷新页面。我正在尝试使用 Web Socket 解决这个问题,以便在特定时间间隔后继续调用 api 并更新前端的数据,但不知何故它不起作用。

请找到以下代码供您参考。

import  HttpClient  from '@angular/common/http';
import  Injectable  from '@angular/core';
import  Observable  from 'rxjs';
import  io  from 'socket.io-client/build/index';

@Injectable(
providedIn: 'root'
)
export class SocketService 
socket: any;
readonly uri: string = 'https://apiurlexample.com/api/xxx/xxxxxx';
constructor(private http: HttpClient) 
debugger;
// this.socket = io(this.uri);
// this.socket = io.connect('http://localhost:8890',  query: "foo=bar" );

getMessages() 
debugger;
let observable = new Observable(observer => 
this.socket = io(this.uri);
this.socket.on('', (data: any) => 
observer.next(data);
);
return () => 
this.socket.disconnect();
;
)
return observable;

listen(eventName: string) 
debugger;
return new Observable((subscriber) => 
this.socket.on(eventName, (data: any) => 
subscriber.next(data);
)
);

emit(eventName: string, data: any) 
this.socket.emit(eventName, data);

getAllData(data: any) 
return this.http.post(`https://apiurlexample.com/api/xxx/xxxxxx`, data);


有什么解决办法吗?

【问题讨论】:

【参考方案1】:

你所做的是正确的。但是,你只在前端设置了websocket,你有没有从后端连续广播? 我的意思是你的套接字已经准备好监听来自后端的变化,但是后端会在一两分钟后发送任何东西吗?

编辑:

或者你可以暗示只添加一个间隔:

setInterval(() => 
    getData(); 
, 60000)

【讨论】:

Quyen Huynh:是的,后端每分钟都会发送更新的数据。但要在前端反映这一点,我必须在一分钟后手动刷新页面。 您能否尝试 console.log 一些内容以确保它在后端工作?或者你可以使用setInterval

以上是关于在Angular中使用websocket发布api调用不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular2 应用程序中使用 angular2-websocket 关闭 websocket 连接时,如何重新连接它?

在 Angular 中连接 WebSocket

“未捕获的类型错误:无法在 Websocket Angular JS 上读取未定义的属性‘延迟’”

在 Angular4 中使用网络套接字?

angular2项目在firefox上加载时websocket中断

在 Angular 和 rxjs 中重新连接 websocket?