angular - 订阅从套接字获得的变量
问题描述
我尝试更新我的令牌,我每 30 秒从我的套接字中获取一次。但是我发现的代码不起作用。我如何订阅这个追逐中的变量?如果我订阅,这些值是总是改变还是第一次改变?
插座
import * as io from 'socket.io-client';
import {Injectable} from '@angular/core';
import {Observable, Subject} from 'rxjs';
@Injectable()
export class SocketService {
public token =new Observable<any>()
second;
socket = io.connect('http://localhost:3333');
msg: any;
getToken() {
console.log('newToken');
this.socket.on('newToken', (data) => {
console.log(data);
this.token = data.token;
this.second = data.second;
console.log(this.token, this.second);
});
}
组件
import { Component, OnInit } from '@angular/core';
import {SocketService} from '../../Service/socket.service';
@Component({
selector: 'app-token',
templateUrl: './token.component.html',
styleUrls: ['./token.component.css']
})
export class TokenComponent implements OnInit {
token;
constructor(
private socket: SocketService,
) {
this.socket.token.subscribe(res => {
this.token = res;
});
}
ngOnInit(): void {
this.socket.getToken();
}
}
解决方案
你是在分配SocketService.token
一个 Observable 还是只是一个令牌?
在这一行
this.token = data.token;
中,我希望您分配一个 Observable。如果data.token
是 Observable,请让我们知道或适当地键入数据。
您可以尝试改用主题。尝试将您的声明更改SocketService
为
public token = new Subject<any>();
然后在 socket.on 回调中。通过设置令牌值this.token.next(data.token)
推荐阅读
- python - 如何使用硒在 chromedriver 中打开单个选项卡
- sql - 如何使用 SELECT 生成 N 个随机值?
- javascript - 错误@wdio/local-runner:启动测试会话失败:错误:在 DevToolsDriver.getPageHandle 找不到页面句柄
- java - java中的类对象是否可以具有值,如果可以,我们如何获取它?
- ethereum - 如何预先为安全帽本地节点地址提供资金
- visual-studio-code - 如何在 Visual Studio 代码回收站 Windows 中恢复已删除的文件夹
- python - 来自 3D 数据的热图,带有浮点数
- gekko - 如何制定在 gekko 中寻找最佳 PID 参数的问题?
- java - 如何只让编辑文本接受 Textview 中的字母
- apache-flink - Apache Flink RocksDB 状态管理