javascript - 当第二个请求依赖于第一个请求时,如何在 Angular 中同步 http.get 请求?

标签 javascript angular typescript

我需要从 Angular 向我的数据库执行一系列 http 请求。在第一步中,我得到了一个对象数组。这工作正常。 在第二步中,我想用附加数据填充每个对象。所以我需要等待第一个 http.request 完成。 我也不想在我的数据被提取之前返回。

我的函数 getData() 应该返回一个 Observable,因为接口(interface)/签名不应该改变(因为它正在程序的其他部分使用并且 observable 对程序逻辑有意义)。

// Returns an array with objects, that have an id, that is needed for the second call 

data[] : Object = new Array(); 
populatedData[] : Object = new Array();


getData(): Observable<Object[]>{
  this.http.get<Object[]>("http://localhost:3000/data").subscribe(data => this.data = data);

// This needs the data from the first call 
 for(int i = 0; i < data.length; i++){
this.http.get<Object>("http://localhost:3000/data/"+data[i].id).subscribe(data => populatedData.push(data)); 
}


return of(populatedData); 

}

最佳答案

您可以使用 switchMap(在初始 GET 完成后,发出其他请求)和 forkJoin(发出多个请求并在所有请求完成时发出)。像这样:

    getSingleEntry = ({ id }) => this.http.get<Object[]>("http://localhost:3000/data/" + id);

    getData = () => this.http.get<Object[]>("http://localhost:3000/data")
        .pipe(
            tap(data => this.data = data),
            switchMap(data => forkJoin(data.map(this.getSingleEntry)));

关于javascript - 当第二个请求依赖于第一个请求时,如何在 Angular 中同步 http.get 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57094094/

相关文章:

css - 使用 TypeScript react 如何在 Textfield Material-UI 中使用图标

javascript - 如何创建自封闭元素 javascript XML DOM?

javascript - 在 JavaScript 中计算元素宽度给出了错误的结果

angular - 通过单击背景或模态外部停止关闭模态

javascript - Angular - 为什么 Number.isNaN 对于非空字符串返回 false?

Typescript - 基于另一个属性的条件属性

typescript - Webpack DefinePlugin 不替换输出中的文本

javascript - 为什么我的 helloworld 程序中没有定义 ReactDOM?

javascript - 为什么要关心 Node.js 中的尾随逗号?

javascript - angular2/javascript 中的动态变量