javascript - 错误类型错误 : subscribe is not a function in Ionic 4

标签 javascript ionic-framework service angular7 ionic4

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

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

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

ERROR TypeError: this._newsService.getAllNews(...).subscribe is not a function

在其他条件下或存在网络时它可以正常工作。为什么会这样?

最佳答案

您的 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);
        });
      }
  });
 }

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

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

关于javascript - 错误类型错误 : subscribe is not a function in Ionic 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58406458/

相关文章:

ios - 只能在 bitcode 设置为 yes 的情况下上传到 Apple App Store

android - 可以正常工作几个小时的服务,而不是没有更多的响应

android - 仅向一项服务发送 Intent

javascript - $(window).scrollTop() 的说法正确吗?

javascript - 在生产中使用 Firebase

javascript - 未捕获( promise ): Response with status: 0 for URL: null

java - 如何让测试等待 Vert.x Verticle 部署完成

javascript - 在javascript中将字符串拆分为特定结果

javascript - 如何处理两个日期之间验证的错误?

javascript - 切换按钮来控制按钮