Javascript 多个异步/等待尝试捕获块
我在这里是因为调试我的应用程序时遇到问题。我不明白为什么我的应用程序会崩溃,这很烦人。我使用的是promises(带有then/catch块),但我了解了使用async/await的必要性 我有一个方法,我做多次等待它。这里的问题是,如果我的应用程序因为任何原因崩溃,我永远不知道问题出在哪里。我已经这样描述了这个区块: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
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)
}