Ax ios экземпляр обещания. Все ошибки обработки - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть следующий код в моей собственной функции async, которая использует другую импортированную функцию из модуля, которая представляет собой пользовательскую оболочку ax ios внутри try/catch блока:

async function getCharacter (realmSlug, characterName) {
    try {
        const [{id, name, gender, faction, race, character_class, active_spec, realm, guild, level, last_login_timestamp, average_item_level, equipped_item_level}, {pets, unlocked_battle_pet_slots},{mounts}] = await Promise.all([
            getCharacterSummary(realmSlug, characterName), -- custom axios instance
            getCharacterPetsCollection(realmSlug, characterName),
            getCharacterMountsCollection(realmSlug, characterName)
        ])
        ....
        return result;
    } catch (error) {
        console.log(error.code);
        if (error.response.status === 404 || error.response.status === 403) {
            console.error(`${getCharacter.name},${characterName}@${realmSlug}`);
        }
        return { name: characterName, realm: realmSlug }
    }
}

Проблема в том, что если я использую promise.all в соответствии со Stackoverflow 1 , 2 , я не могу обработать ошибки. Поэтому проблема в том, что когда я вызываю функцию для выполнения, мои ошибки не обрабатываются в блоке (catch). Совсем. Даже если мне не нужно их печатать, в любом случае я получаю сообщения в консоли о 404 errors, но console.log(error.code) все равно ничего не дает. Например:

enter image description here

Так есть ли способ как-нибудь обработать эти надоедливые сообщения об ошибках в консоли? Например, используя .catch где-нибудь? Или используя for await ... of или rx JS вместо этого, если это возможно?

Экспорт функции и использование .catch

Даже если я экспортирую это используйте функцию getCharacter в другом файле .js и используйте следующий код:

const getCharacter = require('./getCharacter');

               let bulkCharacters = [{realmSlug, characterName},{realmSlug, characterName},... ,n] //array of characters for getCharacter request
               const promises = bulkCharacters.map(async ({realmSlug, characterName}) => {
                    try {
                        return await getCharacter(realmSlug, characterName);
                    } catch (e) {
                        console.log(e)
                    }
                });
                let test = await Promise.all(promises)
                    .catch(function(arrayOfPromises, err) {
                        // log that I have an error, return the entire array;
                        console.log('A promise failed to resolve', err);
                        return arrayOfPromises;
                    })
                    .then(function(arrayOfPromises) {
                        console.log(arrayOfPromises)
                    })
                ;
                console.log('stop')

Я все еще получаю ошибки в консоли, не вызывая catch блок внутри функции getCharacter или этот файл, в котором эта функция был импортирован, и блок catch находится вне функции.

...