Angular HTTP Get调用陷入无限循环

时间:2018-07-25 16:49:20

标签: angular angular-httpclient

嗨,我正在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);
            });
        });
    }

我可以知道以上代码中缺少的内容吗?任何帮助,将不胜感激。谢谢。

1 个答案:

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