На каком уровне обрабатывать ошибки в async/await?

Например:

Есть 2 модуля someRequest, anyRequest.

module.exports = async data => {
  let data = await someReq(data);
  return data.res;
}


module.exports = async data => {
  let data =  await anyReq(data);
  return data.res;
}


В другом файле импортируем эти модули и используем их

let dbreq = require(path_to_DataBaseRequest);
let anyreq = require(path_to_AnyRequest); 

let someFunc = async () => {
    let data = await dbreq();
    let res = await anyreq(data);
    console.log(res)
}
someFunc()


Где стоит использовать try/catch?

На нижних уровнях (в модулях someRequest, anyRequest)

module.exports = async data => {
  try{
    let data = await someReq(data);
     return data.res;
  }
  catch(err){
    console.log(err);
  }
}


или только на верхнем ?

let dbreq = require(path_to_DataBaseRequest);
let anyreq = require(path_to_AnyRequest); 

let someFunc = async () => {
   try{
    let data = await dbreq();
    let res = await anyreq(data);
    console.log(res)
   }
   catch(err){
   console.log(err);
   }
}

someFunc()
  • Вопрос задан
  • 529 просмотров
Решения вопроса 1
alex_keysi
@alex_keysi
Помог с решением? Отметь “правильный ответ”
В самих модулях делаешь throw если что то пошло не так. А обработку ошибки делаешь там где вызываешь функции этих модулей.
Вот пример как реализован recude массива. Он выбрасывает ошибки наверх(т е программисту), а ответсвенность за обработку оставляет на программиста.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@304 Автор вопроса
От себя добавлю, что запись такого рода

let someFunc = async () => {
   try{
    let data = await dbreq();
    let res = await anyreq(data);
    console.log(res)
   }
   catch(err){
   console.log(err);
   }
}

Не позволит нам узнать, где именно мы поймали ошибку, и обрабатывать именно её.
Поэтому имеет место быть запись такого рода

let someFunc = async () => {
   try{
     let data = await dbreq();
   catch(err){
     console.log(err);
   }
   try{
     let res = await anyreq(data);
     console.log(res)
   catch(err){
     console.log(err);
   }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы