【问题标题】:Quick fix for function of type Observable快速修复 Observable 类型的函数
【发布时间】:2021-03-08 00:10:33
【问题描述】:

在我的服务中,我得到了这个函数,当悬停Observable<Product[]>时会返回一个警告

“声明类型既不是'void'也不是'any'的函数必须返回一个值”

getAllProducts(id, token): Observable<Product[]> {
  this.model = 'product';
  this.http.get(this.getUrlById(id), {headers: {'Authorization' : `Bearer ${token}`}})
  .pipe(map((products:Product[] => products))
  .subscribe((products) => this.getAllProdObserv.next(products))
}

有没有快速解决方法?

【问题讨论】:

    标签: angular observable


    【解决方案1】:

    您正在键入返回类型为Observable&lt;Product[]&gt; 的函数, 但您的方法中没有 return 关键字。

    要修复它,只需返回 Observable&lt;T&gt;

    getAllProducts(id, token): Observable<Product[]> {
      this.model = 'product';
      return this.http.get(this.getUrlById(id), {headers: {'Authorization' : `Bearer ${token}`}})
    }
    

    或者将返回值键入为Subscription

    getAllProducts(id, token): Subscription {
      this.model = 'product';
      return this.http.get(this.getUrlById(id), {headers: {'Authorization' : `Bearer ${token}`}})
      .pipe(map((products:Product[] => products))
      .subscribe((products) => this.getAllProdObserv.next(products))
    }
    

    从最后一个例子中,我想你也可以跳过pipe + map。这只是一个额外的步骤,在这种情况下什么都不做:

    .pipe(map((products:Product[] => products))
    

    我只想删除那行:

    getAllProducts(id, token): Subscription {
      this.model = 'product';
      return this.http.get(this.getUrlById(id), {headers: {'Authorization' : `Bearer ${token}`}})
      .subscribe((products) => this.getAllProdObserv.next(products))
    }
    

    一般来说,我会返回Observable&lt;T&gt;(如第一个示例),而不是返回订阅。

    【讨论】:

    • 是的,但后来我得到“类型 '订阅' 缺少来自类型 'Observable' 的以下属性:_isScalar、源、运算符、提升和另外 6 个”
    • 非常感谢 :) 4 分钟后我会接受你的回答,哈哈
    • 欢迎您!我刚刚添加了另一个关于管道 + 地图的小事,可以根据您发布的当前示例跳过。
    【解决方案2】:

    您可以在http.get 中添加return 和Object 类型,使其与声明的类型相匹配。

    getAllProducts(id, token): Observable<Product[]> {
      this.model = 'product';
      return this.http.get<Product[]>(this.getUrlById(id), {headers: {'Authorization' : `Bearer ${token}`}})
    }
    

    然后您可以在其他课程中继续使用 subscribe

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多