Requisito: use cada valor en una matriz para recorrer la interfaz de solicitud, obtener los datos correspondientes y colocarlos en una nueva matriz. Un
ejemplo puede entenderse mejor: el maestro quiere saber las calificaciones de cada estudiante, y luego hay un Interfaz que necesita usar la identificación del estudiante para obtener la puntuación correspondiente.
Entonces, la matriz conocida es:
[1, 2, 3, 4] // 同学id数组
La matriz objetivo es:
[
{
id: 1, name: '张三', score: 98 },
{
id: 2, name: '李四', score: 99 },
{
id: 3, name: '王五', score: 99 },
{
id: 4, name: '老六', score: 100 },
]
Solución:
use async, espere
methods: {
async handleGoods(arr) {
let idArr = [1, 2, 3, 4];
let scoreArr = [];
for (let i = 0; i < idArr.length; i++) {
let data = await this.getScore(i);
scoreArr.push({
id: idArr[i],
name: data.name,
score: data.score,
})
}
if(scoreArr.length == idArr.length){
console.log('出循环结束了');
}
},
async getScore(id) {
return await new Promise((resolve, reject) => {
// 请求接口
getScore({
id: id,
}).then(res => {
resolve(res.data);
}).catch(() => {
reject({
});
})
});
},
}
Resumen:
Para usar async y await en un bucle, puede usar for...of o for, while, etc. No puede usar foreach, porque la ejecución de await en forEarch será paralela.