1
我需要处理数组中的每个元素,为每个元素进行HTTP调用,并且需要跟踪每个调用的HTTP调用状态并在所有事情完成时更新UI。目前我有以下代码访问HTTP内部的对象Observable处理数组时对象数组
for (var singleData of this.someData) {
this._Service.call(singleData.someData).subscribe(
data=> {
this.successGroups.push(singleData);
this.checkState();
},
error=> {
this.failureGroups.push(singleData);
this.checkState();
}
)
}
this._Service是一个简单的服务,它使Angular2 HTTP调用并返回observable。目标如下:
- 拨打电话的列表中的每一项
- 如果成功标志是成功,失败视为失败
- 更新UI一旦所有呼叫完成(成功/失败是无关紧要的。)
上述代码的问题在于,由于“singleData”被更新,所以推送的值不正确。例如,当列表中第一个对象被执行的时候,“singleData”指向列表的第10个项目,而第10个项目取而代之。
一个破解就是将singleData对象传入服务调用中,并将其附加到响应中。不喜欢这种方法寿。 –
这与Observables或Angular或其他任何东西无关。这是经典的函数内循环封闭问题。尝试“为(让)”。 – 2016-05-16 03:37:05