Я здесь, потому что у меня проблемы с отладкой моего приложения. Это очень раздражает, не вижу, почему мое приложение падает. Я использовал обещания (с помощью блоков /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));
}
Есть ли лучший подход, чем мой?
Я создал пакет 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)
}
return err
, просто игнорируя ее и рассматривая ее как успешное значение результата. Если вы не пытаетесь обработать какие-либо ошибки, почему вы вообще используетеtry
/catch
?