Exigence : Utiliser chaque valeur d'un tableau pour parcourir l'interface de requête, obtenir les données correspondantes et les mettre dans un nouveau tableau. Un
exemple peut être mieux compris : l'enseignant veut connaître les notes de chaque élève, et puis il y a un interface qui doit utiliser la pièce d'identité de l'élève pour aller obtenir le score correspondant.
Alors le tableau connu est :
[1, 2, 3, 4] // 同学id数组
Le tableau cible est :
[
{
id: 1, name: '张三', score: 98 },
{
id: 2, name: '李四', score: 99 },
{
id: 3, name: '王五', score: 99 },
{
id: 4, name: '老六', score: 100 },
]
Solution :
utiliser async, attendre
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({
});
})
});
},
}
Résumé :
Pour utiliser async et wait dans une boucle, vous pouvez utiliser la boucle for...of ou for, la boucle while, etc. Vous ne pouvez pas utiliser foreach, car l'exécution de wait dans forEarch sera parallèle.