我正在从Angular应用程序同时发送多个HTTP调用。我想将HTTP调用的响应保存在Map中。
data: Map<number, any> = new map<number,any>();
------------------------------------------------------
this.transactions.foreach((url)=>{
this.http.post(url,{})
.map(data => this.data.set(txnNumber, data))
})
现在,由于HTTP请求是同时发送的,并且在Map的检索和使用方面可能会发生冲突,因此它将重新编写它。我们如何同步它?
答案 0 :(得分:2)
您可以使用zip运算符。创建一个带有请求的数组,该请求存储事务索引,并在所有事务完成后使用foreach获取事务数据,并使用zip执行。
data: Map<number, any> = new map<number,any>();
------------------------------------------------------
const requests = this.transactions.foreach((url, index)=> {
return this.http.post(url,{})).map((response) => ({txNumber: index, response})
});
Observable.zip(...requests)
.map((results: any[]) => {
results.foreach((data) => this.data.set(data.txNumber, data.response))
});