无法将数据从服务传递到组件。受试者的观察者刚刚消失



我想在得到";askServerResponse";从服务器调用。在这种情况下,我使用BehaviorSubject。在hubconnection.on的服务中,在onlineUsersSubject内调试obeserver时,我的观察者是空的,并注意到"arguments"one_answers"caller"属性内有一个错误(未抛出(:"caller"、"callee"one_answers"arguments"属性不能在严格模式函数上访问,也不能在Function.invokeGetter处对其进行调用的arguments对象上访问;

然而,在我调试聊天组件内的onlineUsersSubject时,订阅后,onlineUsersSubject内的观察者不为空

我可以在除了serverListeners之外的任何地方调用onlineUsersSubject.next((方法,它会很好地工作,而且,我可以在该服务内部的任何其他主题上从serverListeners调用next((方法

因此,angular似乎不允许我将sereverListeners的数据准确地传递给任何组件,而是为其本身服务。

信号服务.ts

import * as signalR from "@microsoft/signalr";
import {BehaviorSubject} from "rxjs";
@Injectable({
providedIn: 'root'
})
export class SignalRService {
public onlineUsersSubject = new BehaviorSubject<string>("abcd");
startConnection = () => {
return new Promise((resolve,reject) => {
this.hubConnection = new signalR.HubConnectionBuilder()
.withUrl('https://localhost:7024/toastr', {
skipNegotiation: true,
transport: signalR.HttpTransportType.WebSockets
})
.withAutomaticReconnect([0, 1000, 5000])
.build();
this.setServerListener();
this.hubConnection
.start()
.then((data) => {
this.onlineUsersSubject.next("!!!!"); // this line do nothing in chat component
console.log('Hub Connection Started! ' + data);
resolve('Hub Connection Started! '+ data);
})
.catch(err => {
console.log('An Error occurred: ' + err);
reject(err);
})
});
}
setServerListener() {
this.hubConnection.on("askServerResponse", (someText) => {
//someText is not empty, i'v debugged this
//when I debug next line, observers inside BehaviorSubject from  chat componnent dissapeared
this.onlineUsersSubject.next(someText);
})

聊天组件.ts

import {SignalRService} from "../../signal-r.service";
export class ChatComponent {
constructor(private signalR: SignalRService) {
this.signalR.onlineUsersSubject.subscribe({
next:(res) => {
console.warn("in component:", res);//expect to warn in console, but do nothing
},
error:(err)=>{
console.log(err);
}
});
}

它不会抛出错误,一切都很好,但数据不会传递给组件。。。

看起来SignalRService不是Singleton。请添加@Injectable

@Injectable({
providedIn: 'root'
})
export class SignalRService {

最新更新