组件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);
    }))
  };

这个 idea 是为了在‘res.Connected’(组件A)中反映‘Client.Connected’(服务B)的值.当服务B中的ConnectToBroker()内部的client.Connected的值为true时,为什么来自testMqtt()的console.log总是将res.Connected的值显示为false?我可以在服务B中使用哪个rxjs操作符,以便在返回对组件A中的订阅的响应之前完成client.on回调?

推荐答案

服务的代码使用回调,所以函数中的代码将被执行,我认为值不会被发出,在回调运行后,您是否可以try 使用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);
        }),
    );
  };

Angular相关问答推荐

iOS Mobile Safari - HTML5视频覆盖一切

NG构建后多余的国旗

如何在HTMLTITLE属性中使用Angular 显示特殊字符?

带信号数据源的17角material 表

如何捕获生命周期方法中抛出的Angular组件错误?

如何将 Angular 中的导航路由到同一页面并重新加载

Angular 15 在 URL 中使用@进行路由

执行ng generate environments时出错时需要合集和原理图

在父组件的子组件中使用 ng-template

TypeError:this.restoreDialogRef.afterClosed 不是函数

全局异常处理

如何测试 Angular2 的 router.navigate?

使用 Angular2 将文件上传到 REST API

获取从(keypress)angular2按下的键

得到了预期表达式的插值 ({{}})

从 angular2 模板调用静态函数

如何处理Angular2中的查询参数

ng-template 上的 *ngFor 不输出任何内容

如何在 Angular Material 中设置图标的 colored颜色 ?

如何在 Angular 2 中跟踪路由?