Promise.all () возвращает неопределенное значение - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть массив с тремя именами питомцев. Один неверный. Цель состоит в том, чтобы получить домашних животных из API и, если домашнее животное не существует, вернуть измененный массив только с существующими именами домашних животных. Проблема в том, что Promise.all () возвращает неопределенное значение.

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

1 Ответ

0 голосов
/ 02 ноября 2018

Попробуйте это:

const getValidPets = async (pets) => {
    const petsArray = pets.map(pet => getPetHttp(pet).then(record => record.name).catch(() => 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
...