【问题标题】:ERROR TypeError: subscribe is not a function in Ionic 4错误类型错误:订阅不是 Ionic 4 中的函数
【发布时间】:2020-02-12 19:55:44
【问题描述】:

我正在使用 Ionic News App。我在从服务文件中获取响应时遇到了一个问题。

home.page.ts

getNews(): void {
       this.loading = true;
       this.language = localStorage.language;
       this.checkForToken();
       var userId = this.loggedInUser;
       this._newsService.getAllNews().subscribe(
           (res: any) => {
               console.log("all news==========>", res)
               this.loadNewsToPage(res, userId);
           },
           (err) => {
               this.loading = false;
               this.error = err;
           });
   }

news.service.ts

getAllNews(){
        if(this.network.type == 'none' ){
            console.log(JSON.parse(localStorage.getItem("newsArray")));
            this.newsArray = JSON.parse(localStorage.getItem("newsArray"))
            return this.newsArray;
        }else{    
            return this.http.get(config.baseApiUrl + 'news?isApproved=APPROVED').pipe(
                map((res) => {
                    this.newsArray = res['data'];
                    localStorage.setItem('newsArray',JSON.stringify(this.newsArray))
                    return this.newsArray;
                }),
                catchError(this.handleError));
        }
    }

现在的问题是当网络为“无”时,它会在服务文件中进入“如果”条件,并从本地存储返回响应。但是当网络没有时,它会给我以下错误。

ERROR TypeError: this._newsService.getAllNews(...).subscribe 不是 功能

当它进入 else 条件或存在网络时,它可以正常工作。为什么会这样?

【问题讨论】:

  • 我认为问题出在您的 getAllNews() 上,其中如果网络不存在的情况下,您将直接返回数组,而在其他情况下,它会返回 observable,因此这是您需要解决的问题。跨度>
  • 您可以编辑我的代码并将其作为答案发布吗?如果有帮助,我会接受。

标签: javascript ionic-framework service angular7 ionic4


【解决方案1】:

您的 getAllNews 函数不是 Observable。所以你不能订阅它。请参阅下面的示例,其中您为第一个 if 条件和第二个 else 条件返回一个 Observable。您需要在每个下一个函数之后使用observer.complete() 关闭Observable。

getAllNews(): Observable<any>{
  return new Observable(observer => {
    if(this.network.type == 'none' ){
      console.log(JSON.parse(localStorage.getItem("newsArray")));
        this.newsArray = JSON.parse(localStorage.getItem("newsArray"))
        observer.next(this.newsArray);
        observer.complete();
    } else{    
      this.http.get(config.baseApiUrl + 'news?isApproved=APPROVED').subscribe(
        (result: object) => {
          this.newsArray = result['data'];
          localStorage.setItem('newsArray',JSON.stringify(this.newsArray))
          observer.next(this.newsArray);
          observer.complete();
        },
        (error) => {
          observer.error(error);
        });
      }
  });
 }

您现在可以访问订阅中的下一个块 > 结果和订阅中的错误块> 错误。

this._newsService.getAllNews().subscribe(
  (res: any) => { // observer.next() brings you here
    console.log("all news==========>", res)
    this.loadNewsToPage(res, userId);
  },
  (err) => { // observer.error() brings you here
    this.loading = false;
    this.error = err;
  });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 2018-01-23
    • 2020-01-01
    • 1970-01-01
    • 2020-02-10
    • 2018-04-28
    • 2019-02-14
    • 2021-10-02
    相关资源
    最近更新 更多