подписаться на переменную, полученную из сокета - PullRequest
0 голосов
/ 28 мая 2020

я пытаюсь обновить свой токен, я получаю каждые 30 se c из моего сокета. Но код, который я нашел, не работает. Как мне подписаться на варибал в этой погоне? И если я подписываюсь, меняются ли значения всегда или только в первый раз?

сокет

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();
  }



}

1 Ответ

0 голосов
/ 28 мая 2020

Вы назначаете SocketService.token Observable или просто токен?

В этой строке this.token = data.token; Я ожидаю, что вы назначите Observable. Если data.token является Observable, сообщите нам или введите данные соответствующим образом.

Вместо этого вы можете попробовать использовать тему. Попробуйте изменить свое объявление в SocketService на public token = new Subject<any>();

Затем в обратном вызове socket.on. Установите значение токена this.token.next(data.token)

...