Angular:将Http响应的结果添加到地图

时间:2018-07-04 11:14:53

标签: javascript angular multithreading http synchronization

我正在从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的检索和使用方面可能会发生冲突,因此它将重新编写它。我们如何同步它?

1 个答案:

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