javascript - 错误类型错误:订阅不是 Ionic 4 中的函数
问题描述
我正在使用 Ionic News App。我在从服务文件中获得响应时遇到了一个问题。
主页.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;
});
}
新闻服务.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));
}
}
现在的问题是当网络为“无”时,它会进入服务文件中的“如果”条件并从本地存储返回响应。但是当网络没有时,它会给我以下错误。
错误类型错误:this._newsService.getAllNews(...).subscribe 不是函数
当它进入其他条件或存在网络时,它可以正常工作。为什么会这样?
解决方案
您的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;
});
推荐阅读
- javascript - 为什么我的 AJAX 请求会打开我的 PHP 文件,而不是只返回应有的响应文本?
- java - Kafka消费者 - 为什么在心跳线程中记录偏移重置?
- react-native - 当 Modal 显示时,React-Native 标题分别动画到 View
- php - 在 Woocommerce 我的帐户下载部分显示产品图片
- c# - 评估引用外部数据的布尔表达式
- google-apps-script - 如何通过从谷歌表格单元格中插入的链接获取其 URL,将谷歌驱动器文件附加到电子邮件
- javascript - 如何使用 jquery 旋钮通过 laravel 中的 pusher 绑定来自输入元素的更新值?
- node.js - verdaccio 错误:413 Payload Too Large - PUT 请求实体太大
- hibernate - 当策略为 IDENTITY 时,休眠 RX 插入和刷新和刷新返回异常
- machine-learning - 通常如何对 RNN/LSTM 的序列数据执行批处理