【问题标题】:Angular getting the response of a service responding undefinedAngular获取服务响应未定义的响应
【发布时间】:2019-12-12 11:23:00
【问题描述】:

我在获取从我的服务返回的数据时遇到问题。

我正在使用Angular 8

代码如下:

在服务中

callit(url: string) {
    this.subscription = this.socket$.subscribe(
      (message) => {
        return message;
      },
      (err) => {
        return err;
      },
      () => console.warn('Completed!')
    );
}

在组件中。

我试过了:

getResultFromService() {
    var res = this.myservice.callit(myurl);
}

上面的 res 说的是 undefined。

我试过了:

getResultFromService() {
    this.myservice.connect(myurl).subscribe
}

但是订阅给了我这个错误:

类型 'void'.ts(2339) 上不存在属性 'subscribe'

如何在不使用promise 的情况下从服务返回中获取结果?

【问题讨论】:

标签: angular typescript


【解决方案1】:

您的 callIt 函数不返回任何内容。

所以从外部你不能调用.subscribe,因为你试图在 undefined 上调用它。

现在在您的 callIt 方法中,您正在订阅 observable。

如果您希望保留该逻辑,您将改为返回没有.subscribe 方法的订阅。您可以将订阅逻辑移到 callIt 方法之外并返回 observable。

或者你仍然可以返回一个 observable 但使用pipes 来拦截消息,并且仍然从外部订阅。这将允许您仍然执行您在 service.callIt 中的任何逻辑,并且仍然在外部订阅。


    return this.socket$
        .pipe(tap((message) => console.log(message))
        .pipe(catchError((e) => console.error(e)))
        .pipe(finally(() => console.log('Completed')))

【讨论】:

    【解决方案2】:

    像这样试试。

    .服务

    callit(url: string) {
        return this.socket$
    }
    

    .组件

    getResultFromService() {
        this.myservice.callit(myurl).subscribe(
          (message) => {
            res = message;
          },
          (err) => {
            console.log('error')
          },
          () => console.warn('Completed!')
        );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多