У меня есть следующий код в моей собственной функции 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](https://i.stack.imgur.com/sNZeX.png)
Так есть ли способ как-нибудь обработать эти надоедливые сообщения об ошибках в консоли? Например, используя .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
находится вне функции.