【发布时间】:2018-11-03 05:25:11
【问题描述】:
我有一个包含三个宠物名字的数组。一个是不正确的。目标是从 api 获取宠物,如果宠物不存在,则返回仅包含现有宠物名称的更改数组。问题是 Promise.all() 返回 undefined。
const getValidPets = async (pets) => {
const petsArray = pets.map(async (pet) => {
try {
const record = await getPetHttp(pet);
return record.name;
} catch (error) {
return undefined;
}
});
return Promise.all(petsArray).then((filteredPets) => {
const arr = filteredPets.filter(petName => petName !== undefined);
return arr; // ["Rex", "Jug"] - here is correct!
});
};
const pets = ["Rex", "Jug", "some_wrong_name"];
const finalPets = await getValidPets(pets); // undefined - incorrect
【问题讨论】:
-
您的数组是
strings的数组,而不是Promises的数组 -
我的目标 - 得到所有宠物的承诺,将它们的(有效)名称作为字符串数组返回
-
您的代码可以正常工作:codepen.io/anon/pen/WYNbKP?editors=0012。您一定是遗漏了什么,或者最后没有记录正确的值。
-
您的代码在模拟 HTTP 函数中运行良好:jsfiddle.net/srqv7pob
-
请提供minimal reproducible example - 正如已经说过的,只要
getHttp(pet)被模拟或等效,您的示例代码就可以工作。
标签: javascript arrays promise es6-promise