【发布时间】:2019-10-29 06:32:17
【问题描述】:
我正在使用 Promise 和 async 来等待网络请求完成。变量 info 使用 console.log(infos); 显示其值时为空;
我不确定为什么以及我做错了什么?
var processFruits = async () => {
let infos = [];
let fruits = ["apples", "pears", "bananas"]
await fruits.forEach(async fruit => {
let response = await getFruitInfo(fruit);
infos.concat(response);
console.log(response);
});
console.log(infos);
};
let getFruitInfo = (fruit) => new Promise((resolve, reject) => {
fetch("https://www.fruitmap.org/api/trees", {
method: 'GET',
}).then(response => {
if (response.ok) {
resolve(response.json());
} else {
reject(error);
}
}).catch(error => {
reject(error);
});
});
【问题讨论】:
-
你的意思是
infos = infos.concat(response);? -
forEach不适用于异步函数。使用普通的for of循环顺序运行您的 Promise,或使用Promise.all(...map...)并行运行。 -
避免
getFruitinfo中的Promiseconstructor antipattern!
标签: javascript ecmascript-6 callback async-await es6-promise