首页 > 解决方案 > 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');
    }

我可以知道我在上面的代码中缺少什么吗?任何帮助,将不胜感激。谢谢你。

标签: angularangular-httpclient

解决方案


无需从您的订阅中返回新的承诺,只需使用 .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);
        });
}

推荐阅读