node js несколько попыток - PullRequest
1 голос
/ 28 января 2020

Является ли плохой практикой использование нескольких попыток / уловов рядом друг с другом? как они работают и исполняются в nodejs и что является лучшей практикой? одна попытка catch для всего фрагмента кода или несколько попыток catch?

const function = () => {

try{

   // some code 

   } catch(e) {

     console.log(e);

}

try{

   // some other code 

   } catch(e) {

     console.log(e);

   }

} 

vs

const function = () => {

try{

   // all of the code 

   } catch(e) {

   console.log(e);
}

} 

Ответы [ 4 ]

2 голосов
/ 28 января 2020

Это может быть полезной техникой, если вам нужно различать разные виды ошибок, которые могут быть выданы в разных строках. Например:

try {
  await verifyCredentials();
} catch(e) {
  // (<send response to user that they aren't authenticated>)
  return;
}
try {
  await saveToDatabase();
} catch(e) {
  // (<send response to user that there was a problem saving something to the database>)
  return;
}

Это нормально.

Напротив, если вы просто хотите видеть , если ошибка, но вы не видите заботясь о различии различных типов ошибок, один try блок будет более кратким и простым:

try {
  await verifyCredentials();
  await saveToDatabase();
} catch(e) {
  // (<send response to user that there was a problem>)
  return;
}

Обе опции имеют свое место.

1 голос
/ 28 января 2020

Я бы порекомендовал использовать несколько try / catch, когда вам нужно иметь дело с различными ответами на ошибки, и вы заботитесь об обработке их ошибок

Наличие одного блока try / catch для одного фрагмента функции, который не заботится о фактическом ошибка и просто нужно обработать ошибку generi c. Это распространенный и широко используемый подход. Это также делает ваш код чистым и аккуратным

Я следую за распространенной ошибкой сборки и возвращаю фактическую ошибку в контексте, создавая эту ошибку:

Например, :

    try
    { 
    const response =  await updateCollection(data);
    await processResponse();
    }        
    catch(e) 
    {
   // This build common error with actual error context (wrapper)
   let buildError = buildMyErrorWithContext(e)
   return buildError ;
    }
0 голосов
/ 28 января 2020

Это на самом деле зависит от вашего кода логи c. Предположим, что вы следуете синхронному шаблону (asyn c -wait), несколько попыток перехвата могут быть немного сложнее. Например, если переменная в вашем третьем блоке try-catch зависит от переменной, которая не смогла получить значение (или получает неправильное значение) в вашем первом try-catch, вы должны обрабатывать это отдельно. Таким образом, при многократной попытке поймать, я сначала должен убедиться, что части кода, которые зависят друг от друга, могут обеспечить правильные результаты. Это может быть довольно утомительно. Лично я в большинстве случаев предпочитаю использовать одну попытку, используя что-то вроде этого:

try {
  await doSomething();
  await doSomethingElse();
} catch(err) {
  return({"error": err.message});
}
0 голосов
/ 28 января 2020

Это зависит от требований вашего проекта, если вы не хотите выполнять код после первой ошибки, тогда вы можете использовать несколько попыток перехвата, иначе может работать только одна попытка перехвата.

...