angular - Angular HTTP Get 调用陷入无限循环
问题描述
嗨,我正在 Angular 5 中开发 Web 应用程序。我正在 Angular 5 中开发树结构。我正在调用 http get 来获取子节点。我能够获得子节点,但 api 将进入无限循环。它永远不会停止。下面是我的实现。
getChildren(node: any) {
return new Promise((resolve, reject) => {
this.nodeservice.GetNodes().subscribe((data: any) => {
const newNodes = data.map((c) => Object.assign({}, c));
setTimeout(() => resolve(newNodes), 1000);
});
});
}
以下是我的服务电话。
public GetNodes() {
return this.http.get('http://localhost:4200/assets/jsonresponse.json');
}
我可以知道我在上面的代码中缺少什么吗?任何帮助,将不胜感激。谢谢你。
解决方案
无需从您的订阅中返回新的承诺,只需使用 .toPromise() 让您的服务 Observable 成为一个承诺
因此,在您的服务中,“nodeService”相反,getNodes() 将使用 angular 的 httpClient 或 http 来创建一个 Observable,然后您承诺它。
客户端:
this.http.get().toPromise()
网址:
return this.http.get(this.data, v)
.toPromise()
.then(response => response.json())
.catch(this.handleError);
然后在您的组件或任何您订阅的地方,您都会得到一个承诺,因此请使用 then()。如果您使用 toPromise(),请不要忘记将任何方法 sigs 的返回值更改为 Promise。
前任:
getNodes(): Promise<any>
您的组件:删除新的承诺,而不是订阅使用 then()
getChildren(node: any) {
this.nodeservice.GetNodes().then((data: any) => {
const newNodes = data.map((c) => Object.assign({}, c));
setTimeout(() => resolve(newNodes), 1000);
});
}
推荐阅读
- python-3.x - 按距离零最远的值对元组列表进行排序
- performance - 用于检测内存碎片的性能计数器
- r - Rmarkdown 文本在代码块内换行注释
- python - 如何使用 Python 查找隐藏文件?
- python - 字典中的元组列表——Python
- javascript - Chrome 90 移除了 #intensive-wake-up-throttling 标志
- javascript - 过滤数组时,未定义函数
- nativescript - nativescript bitbucket-pipelines.yml 配置
- python - 尝试将文本与参数之间的空格结合起来
- python - 如何在python中使用收据打印机打印收据