Безопасно ли возвращать «console.error» вместо «undefined»? - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть фрагмент кода, который выглядит следующим образом:

// very important checks:
if (blah_blah_blah === true) {
  console.error("Whoops! Something went wrong!");
  return undefined;
}

/*
 * carry on doing things...
 */

// more important checks:
if (blah_blah_blah_blah === true) {
  console.error("Whoops! Something else went wrong!");
  return undefined;
}

/*
 * carry on doing more things...
 */

Часть return undefined; казалась избыточной, поскольку я мог просто сделать return console.error("...");, что я пробовал, и кажется работать так же.

Я пытался проверить, что console.error() официально возвращается на MDN, но не смог найти никакой информации об этом.

Я также попытался проверить возврат через Node.js в моей консоли, и вывод:

> console.error("Hello World!")
Hello World!
undefined
> 

Мой вопрос; безопасно ли возвращать возвращаемое значение console.error вместо undefined?

Спасибо.

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Это нормально, но не очень хорошая практика.

console.error - это функция, зависящая от реализации (она даже не является частью стандарта ECMAScript), поэтому ее возвращаемое значение также неизвестно. Однако (насколько я знаю) он возвращает undefined как в основных браузерах, так и Node.js.

Так что эти три можно сказать равными:

return console.error('Oops')
console.error('Oops')
return undefined
console.error('Oops')
return

Хотя это работает, это нехорошо

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

Гораздо лучше следующее:

throw new Error('Oops')

Почему?

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

Я подробно объяснил в этом SO почта .

1 голос
/ 19 апреля 2020

Тесто, чем возвращение console.error, вы должны вернуть new Error("Error message").

и регистрировать ошибку один раз после вызова функции, которая возвращает эту ошибку.

function someFunction() {
   // very important checks:
   if (blah_blah_blah === true) {
     return new Error("Whoops! Something went wrong!");
   }

   /*
    * carry on doing things...
    */

   // more important checks:
   if (blah_blah_blah_blah === true) {
     return new Error("Whoops! Something else went wrong!");
   }

   /*
    * carry on doing more things...
     */
 }
 let returnValue = someFunction()
 if(returnValue instanceof Error) {
    console.error(returnValue)
 }
...