嗨,我正在Angular 5中开发Web应用程序。正在Angular 5中开发树结构。我正在进行http get调用以获取子节点。我能够获得子节点,但api将陷入无限循环。它永远不会停止。下面是我的实现。
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_alignLeft="@id/text_view"
android:layout_alignRight="@id/text_view"
android:scaleType="fitXY" />
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Some text here" />
</RelativeLayout>
下面是我的服务电话。
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);
});
});
}
我可以知道以上代码中缺少的内容吗?任何帮助,将不胜感激。谢谢。
答案 0 :(得分:0)
无需从订阅中返回新的承诺,只需使用.toPromise()使您的服务Observable成为一个承诺
因此,在您的服务中,“ nodeService”而不是getNodes()将使用angular的httpClient或http创建一个Observable,然后将其允诺。
HttpClient:
this.http.get().toPromise()
Http:
return this.http.get(this.data, v)
.toPromise()
.then(response => response.json())
.catch(this.handleError);
,然后在您的组件中或无论您订阅什么,您都会得到一个诺言,因此请使用then()。如果您使用的是toPromise(),请不要忘记将任何方法sigs返回值更改为Promise。
例如:
getNodes(): Promise<any>
您的组件:删除新的Promise,然后使用then()代替订阅
getChildren(node: any) {
this.nodeservice.GetNodes().then((data: any) => {
const newNodes = data.map((c) => Object.assign({}, c));
setTimeout(() => resolve(newNodes), 1000);
});
}