for循环异步请求中,更改ref绑定的值,值不变,是最后一次获得的,什么原因
时间: 2023-10-10 16:05:14 浏览: 89
当你在`for`循环中进行异步请求时,循环体内的异步操作不会阻塞循环的执行,循环会继续执行下去。因此,当异步操作完成时,循环早已执行完毕,此时`ref`绑定的值已经被更新为最后一次循环中的值。
要解决这个问题,可以将异步操作改为同步操作,或使用`Promise.all()`等方法来等待所有异步操作都完成后再进行下一步操作。
以下是一个示例代码:
```javascript
async function updateList(list) {
const promises = list.map(async item => {
const result = await fetchData(item.id);
item.value = result.value;
});
await Promise.all(promises);
}
// 调用示例
const list = [
{id: 1, value: null},
{id: 2, value: null},
{id: 3, value: null},
];
await updateList(list);
console.log(list); // 此时list中的value属性已经被正确地更新了
```
在这个例子中,我们将异步操作改为了异步函数`async fetchData()`,使用了`Promise.all()`方法来等待所有异步操作都完成后再进行下一步操作。这样就可以确保`list`中的`value`属性被正确地更新了。
阅读全文