async getPorts () { const outputArr = [] const promises = [] for (let i = 1; i <= 7; i++) { promises.push( electricQuery({ electricId: ELECTRIC_ID, commandKey: 15, queryMode: 1, week: i }).then(({ data }) => { if (data[0]) { outputArr.push(data[0]) } }) ) } console.log(outputArr) await Promise.all(promises) this.data = outputArr 这个函数得到的数据每次和接口中的数据不对应,outputArr.push进去的数据顺序不对,代码怎么改
时间: 2023-12-16 07:06:42 浏览: 24
这是因为 `promises` 数组中的每个 Promise 对象都是异步执行的,所以 `console.log(outputArr)` 语句在所有 Promise 对象执行完成之前就已经执行了,因此输出的数组顺序不正确。
为了解决这个问题,你可以将 `Promise.all(promises)` 返回的结果数组作为 `outputArr`,而不是在每个 Promise 对象的回调函数中 push 数据到 `outputArr` 中。你的代码可以改为如下所示:
```
async getPorts () {
const promises = []
for (let i = 1; i <= 7; i++) {
promises.push(
electricQuery({
electricId: ELECTRIC_ID,
commandKey: 15,
queryMode: 1,
week: i
}).then(({ data }) => {
return data[0]
})
)
}
const outputArr = await Promise.all(promises)
console.log(outputArr)
this.data = outputArr
}
```
这样,`Promise.all(promises)` 将会返回一个 Promise 对象,该对象在所有 Promise 对象都执行完成后才会 resolve,resolve 的结果是一个数组,包含了每个 Promise 对象的回调函数返回的结果,这样可以确保数组顺序正确。然后将这个数组赋给 `outputArr`,并将其作为函数的返回结果。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)