Javascript 而http查询直到parentID值为';0';

Javascript 而http查询直到parentID值为';0';,javascript,typescript,Javascript,Typescript,我正在设置一个while循环来检查父ID是否存在。每次我运行此代码时,我的应用程序都会崩溃。首先,我要从JSON文档中设置parentID。之后,我运行一个对位置索引的HTTP请求。在这个索引中,我将为下一个http请求获取内容(城市、州、土地的名称)和下一个parentID,直到parentID为“0” 最后,我需要这个输出->欧洲(parentID=0)、德国(parentID=14)、柏林(parentID=34) 我做错了什么?你的做什么。。。而是一个无限循环。 循环是同步的,http调

我正在设置一个while循环来检查父ID是否存在。每次我运行此代码时,我的应用程序都会崩溃。首先,我要从JSON文档中设置parentID。之后,我运行一个对位置索引的HTTP请求。在这个索引中,我将为下一个http请求获取内容(城市、州、土地的名称)和下一个parentID,直到parentID为“0”

最后,我需要这个输出->欧洲(parentID=0)、德国(parentID=14)、柏林(parentID=34)


我做错了什么?

你的
做什么。。。而
是一个无限循环。 循环是同步的,http调用是异步的。因此浏览器反复运行循环,始终使用相同的
parentID

你应该这样写:

const getParent = (parentID) => {
    this.http.placeById(parentID).subscribe(analyse => {
        this.place.push(analyse['_source']['content']);
        let newParentID = analyse['_source']['parentID'];
        if (newParentID !== '0') {
            getParent(newParentID);
        }
    });
}
let firstParentID = res['_source']['parentID'];
getParent(firstParentID);

完美解
const getParent = (parentID) => {
    this.http.placeById(parentID).subscribe(analyse => {
        this.place.push(analyse['_source']['content']);
        let newParentID = analyse['_source']['parentID'];
        if (newParentID !== '0') {
            getParent(newParentID);
        }
    });
}
let firstParentID = res['_source']['parentID'];
getParent(firstParentID);