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

Javascript 多个异步/等待尝试捕获块,javascript,node.js,asynchronous,async-await,Javascript,Node.js,Asynchronous,Async Await,我在这里是因为调试我的应用程序时遇到问题。我不明白为什么我的应用程序会崩溃,这很烦人。我使用的是promises(带有then/catch块),但我了解了使用async/await的必要性 我有一个方法,我做多次等待它。这里的问题是,如果我的应用程序因为任何原因崩溃,我永远不知道问题出在哪里。我已经这样描述了这个区块: static async processCSGOGroupsAndUsers (groupName) { try{ const cs

我在这里是因为调试我的应用程序时遇到问题。我不明白为什么我的应用程序会崩溃,这很烦人。我使用的是promises(带有then/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));

}
静态异步进程CSGOGroupsandUsers(groupName){
试一试{
const csgoApiData=等待csgoApi(组名);
const parsedData=wait xmltojson(csgoApiData);
const id=parsedData.memberList.groupID64;
//const members=await retrieveMembers(groupName,parsedData.memberList.memberCount);
const totalUsers=await users服务.processCSGOUsers(id,parsedData);
常量csgoGroup={
名称:parsedData.memberList.groupDetails.groupName,
siteUrl:parsedData.memberList.groupDetails.groupURL,
身份证件
总用户
};
等待组数据保存(csgoGroup);
}捕捉(错误){
返回错误;
}
}
静态异步进程CSG用户(groupId,parsedData){
试一试{
设steamIdsArr=[];
const usersSteamIdsObj=parsedData.memberList.members.streamid64;
key(usersSteamIdsObj).forEach(key=>{
//if(streamidsarr.length<2)//TODO csGOBackPackAPI不允许我每小时执行超过50个请求
蒸汽推动({
steam_group_id_64:groupId,
steam_id_64:usersSteamIdsObj[key]
});
});
//const filteredUsers=await UserService.filterUsersByInventoryValue(SteamIDArr);
UsersDao.saveUsers(streamidsarr);
}捕捉(错误){
控制台日志(err);
返回错误;
}
}
静态进程CSG组(请求、恢复){
团体服务
.processCSGOGroupsAndUsers(请求主体组)
.然后(()=>res.status(200.end())
.catch(错误=>res.status(400).send(错误));
}

有比我的更好的方法吗?

我创建了一个NPM包来帮助解决这种情况。

下面显示了示例用法。其想法是,它应该有助于删除try/catch,并用条件逻辑替换它-希望有助于使所有内容更具可读性!:)


我创建了一个NPM包来帮助解决这种情况。

下面显示了示例用法。其想法是,它应该有助于删除try/catch,并用条件逻辑替换它-希望有助于使所有内容更具可读性!:)


“我明白了使用async/await的必要性。”-什么?根本没有必要。如果您有使用promise方法的工作代码,为什么要更改它呢?您肯定不想
返回err
,而只是忽略它并将其视为成功的结果值。如果您不想处理任何错误,为什么要使用
try
/
catch
?我开始使用async/await,因为需要使用高级范围变量。是的,我想处理错误,正如您在代码中看到的,我正在进行外部api调用、数据库操作,那么您想如何处理它们呢?出现故障时,您显示的代码不会执行任何操作(除了一个日志)。请将catch块从
}catch(err){return err;}
更改为
}catch(err){console.log(err)}
。或
抛出新错误(err)
。return关键字在函数中用于返回值。您不能以这种方式使用
return
。要查看错误代码运行时发生的情况,请打开一个新文件并放入其中
返回“ok i see now”
,然后运行它。“我了解使用async/await的必要性。”-什么?根本没有必要。如果您有使用promise方法的工作代码,为什么要更改它呢?您肯定不想
返回err
,而只是忽略它并将其视为成功的结果值。如果您不想处理任何错误,为什么要使用
try
/
catch
?我开始使用async/await,因为需要使用高级范围变量。是的,我想处理错误,正如您在代码中看到的,我正在进行外部api调用、数据库操作,那么您想如何处理它们呢?出现故障时,您显示的代码不会执行任何操作(除了一个日志)。请将catch块从
}catch(err){return err;}
更改为
}catch(err){console.log(err)}
。或
抛出新错误(err)
。return关键字在函数中用于返回值。您不能以这种方式使用
return
。要查看错误代码运行时发生的情况,请打开一个新文件并放入其中
返回“ok i see now”
,然后运行它。
import task from '@simmo/task'

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

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