使用异步数据修改数组

时间:2014-10-17 20:20:24

标签: javascript angularjs

我有一个非常奇怪的问题,我确信世界上有人已经弄清楚了。但是,让我们保持简单。好的,我们走了。

所以我有一个简单的对象数组。我们现在说5个对象。

[{id: 1, data: 'stuff'}, {id: 2, data: 'stuff'}, {id: 3, data: 'stuff'}, {id: 4, data: 'stuff'}, {id: 5, data: 'stuff'}]

然后我做的是制作3个ajax请求,显然,这些请求都会在不同时间返回。我想要做的是根据id更新这个数组。例如,我发送3个ajax请求并接收对象1,2和4的新数据。我需要更新数组中各个对象的data属性。我使用Array.splice进行更新。我发现的是,有时候,由于数据在不同时间进入,因此事情没有正确更新。我认为这是因为splice所做的实际上是从数组中删除对象然后重新插入新数组。似乎有一些实例,当splice方法正在删除一个对象,然后另一个响应进来并尝试删除另一个对象,但是,该对象不在正确的索引中,因为第一个对象被删除并且没有&已经插入了。因此更新已关闭。

2 个答案:

答案 0 :(得分:1)

根本没有理由需要更改数组,只是尝试更新数组中的对象。此外,索引应该无关紧要,因为您使用id属性来唯一标识每个对象,而不是数组中的索引。

您应该使用最简单的方法遍历数组,找到具有相应id的对象并更新它。

答案 1 :(得分:0)

这可以通过循环遍历每个对象并保持对对象的引用来轻松处理,以便您可以在每个请求完成时更新每个对象。

var promiseArr = dataArr.map(function (obj) {
    return $http.get('/data/' + obj.id).then(function (result) {
        obj.data = result.data;
    });
});

// optional...
$q.all(promiseArr).then(function () {
    console.log('all done!');
});