代码之家  ›  专栏  ›  技术社区  ›  AlexZeDim

Axios instance promise.all错误处理

  •  0
  • AlexZeDim  · 技术社区  · 5 年前

    我自己有以下代码 async axios 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 rxJS 如果可能的话?

    即使我导出这个函数 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 内部阻塞 获取字符 函数或在其中导入此函数并 抓住 块不在函数范围内。

    0 回复  |  直到 5 年前