首页 > 解决方案 > 订阅从套接字获得的变量

问题描述

我尝试更新我的令牌,我每 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();
  }



}

标签: angularsocketsobservablesubscribe

解决方案


你是在分配SocketService.token一个 Observable 还是只是一个令牌?

在这一行 this.token = data.token;中,我希望您分配一个 Observable。如果data.token是 Observable,请让我们知道或适当地键入数据。

您可以尝试改用主题。尝试将您的声明更改SocketServicepublic token = new Subject<any>();

然后在 socket.on 回调中。通过设置令牌值this.token.next(data.token)


推荐阅读