繁体   English   中英

多个异步/等待尝试捕获块

[英]Multiple Async/Await Try-Catch Block

我在这里是因为我在调试我的应用程序时遇到麻烦。 看不到我的应用为何崩溃,这非常令人讨厌。 我正在使用promises(withn / catch块),但是我开始需要使用async / await。

我有一个方法,我在上面做多次等待。 这里的问题是,如果我的应用程序由于任何原因而崩溃,我永远都不知道问题出在哪里。 我已经描述了这样的块:

         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));

}

有没有比我的方法更好的方法?

我创建了一个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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM