Несколько Асинхронных / Ожидать Блокировка Try-Catch

1

Я здесь, потому что у меня проблемы с отладкой моего приложения. Это очень раздражает, не вижу, почему мое приложение падает. Я использовал обещания (с помощью блоков /catch), но я получаю необходимость использования async/wait.

У меня есть метод, в котором я много раз жду. Проблема здесь в том, что если мое приложение падает, потому что по какой-либо причине я никогда не знаю, в чем проблема. Я описал блок следующим образом:

         static async processCSGOGroupsAndUsers (groupName)  {

    try{
        const csgoApiData = await csgoApi(groupName);

        const parsedData = await xmltojson(csgoApiData);

        const id = parsedData.memberList.groupID64;
        //const members = await retrieveMembers(groupName, parsedData.memberList.memberCount);
        const totalUsers = await UsersService.processCSGOUsers(id, parsedData);

        const csgoGroup = {
            name: parsedData.memberList.groupDetails.groupName,
            siteUrl: parsedData.memberList.groupDetails.groupURL,
            id,
            totalUsers
        };

        await GroupsDao.save(csgoGroup);

    }catch (err){
        return err;
    }

}


  static async processCSGOUsers (groupId, parsedData) {

    try{

        let steamIdsArr = [];

        const usersSteamIdsObj = parsedData.memberList.members.steamID64;

        Object.keys(usersSteamIdsObj).forEach(key => {
            //if (steamIdsArr.length < 2)  // TODO csGOBackPackAPI don't let me do more than 50 request per hour
                steamIdsArr.push({
                    steam_group_id_64: groupId,
                    steam_id_64: usersSteamIdsObj[key]
                });
        });

        //const filteredUsers =  await UserService.filterUsersByInventoryValue(steamIdsArr);
        UsersDao.saveUsers(steamIdsArr);

    }   catch(err){

        console.log(err);

        return err;
    }
}

static processCSGOGroups(req, res){
    GroupService
        .processCSGOGroupsAndUsers(req.body.group)
        .then( () => res.status(200).end())
        .catch( error => res.status(400).send(error));

}

Есть ли лучший подход, чем мой?

  • 2
    « Я понимаю необходимость использования async / await. » - что? Там нет необходимости вообще. Если у вас есть рабочий код, который использует методы обещания, зачем его менять?
  • 0
    Вы определенно не хотите return err , просто игнорируя ее и рассматривая ее как успешное значение результата. Если вы не пытаетесь обработать какие-либо ошибки, почему вы вообще используете try / catch ?
Показать ещё 5 комментариев
Теги:
async-await
asynchronous

1 ответ

0

Я создал пакет NPM, чтобы помочь в подобных ситуациях. https://www.npmjs.com/package/@simmo/task

Ниже показано использование примера. Идея заключается в том, что она должна помочь удалить замену try/catch с помощью условной логики - надеюсь, что поможет сделать все более читаемым! :)

import task from '@simmo/task'

const { error, data } = await task(fetch('/some-api'))

if (error) {
  // Failure
  console.error(error)
} else {
  // Success
  console.log(data)
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню