为什么可观察对象在回调完成之前就返回了?

问题描述 投票:0回答:1

组件 A 订阅服务 B 中的可观察对象:

A组份:

testMqtt(){
    console.log('testMqtt is called');
    this.serviceB.connectToBroker().subscribe({
      next: (resp) => console.log('response from connection to mqtt: ', resp.connected),
      error: (err) => console.log('error from connection to mqtt: ', err)
    });
  }

服务B:

  connectToBroker(){
    let client = mqtt.connect(this.url, {clientId: 'abc123'});
    return of(client.on('connect', (packet) => {
      console.log('testing value of connected: ', JSON.stringify(packet));
      console.log('value of client connected: ', client.connected);
    }))
  };

这个想法是在“resp.connected”(组件A)中反映“client.connected”(服务B)的价值。当服务 B 中 connectToBroker() 内的 client.connected 值为 true 时,为什么 testMqtt() 中的 console.log 总是将 resp.connected 的值显示为 false?我可以在服务 B 中使用哪个 rxjs 运算符来允许在组件 A 中返回对订阅的响应之前完成 client.on 回调?

angular rxjs mqtt
1个回答
0
投票

服务的代码正在使用回调,因此函数内的代码将执行,我不认为该值会被发出,回调运行后,您可以尝试使用

fromEvent
创建一个可观察的侦听器相反!

connectToBroker(){
    let client = mqtt.connect(this.url, {clientId: 'abc123'});
    return fromEvent(client, 'connect').pipe(
        tap(() => {
            console.log('testing value of connected: ', JSON.stringify(packet));
            console.log('value of client connected: ', client.connected);
        }),
    );
  };
© www.soinside.com 2019 - 2024. All rights reserved.