Spec-Zone.ru › ESLint

отдавать-предпочтение-отказам-promise-с-ошибками

Требуется использовать объекты Error в качестве причин отказа Promise

Считается хорошей практикой передавать только экземпляры встроенного объекта Error в функцию reject() для пользовательских ошибок в Promise. Объекты Error автоматически хранят трассировку стека, которая может быть использована для отладки ошибки, определив, откуда она произошла. Если Promise отклоняется с не-Error значением, определить место возникновения отклонения может быть сложно.

Подробное описание правила

Это правило призвано гарантировать, что Promise отклоняются только с объектами Error.

Параметры

Это правило принимает один необязательный аргумент объекта:

  • allowEmptyReject: true (false по умолчанию) разрешает вызовы Promise.reject() без аргументов.

Примеры неправильного кода для этого правила:

Открыть в Playground
/*eslint prefer-promise-reject-errors: "error"*/

Promise.reject("something bad happened");

Promise.reject(5);

Promise.reject();

new Promise(function(resolve, reject) {
  reject("something bad happened");
});

new Promise(function(resolve, reject) {
  reject();
});

Примеры правильного кода для этого правила:

Открыть в Playground
/*eslint prefer-promise-reject-errors: "error"*/

Promise.reject(new Error("something bad happened"));

Promise.reject(new TypeError("something bad happened"));

new Promise(function(resolve, reject) {
  reject(new Error("something bad happened"));
});

var foo = getUnknownValue();
Promise.reject(foo);

Примеры правильного кода для этого правила с параметром allowEmptyReject: true.

Открыть в Playground
/*eslint prefer-promise-reject-errors: ["error", {"allowEmptyReject": true}]*/

Promise.reject();

new Promise(function(resolve, reject) {
  reject();
});

Известные ограничения

Из-за ограничений статического анализа это правило не может гарантировать, что вы будете отклонять Promise только с объектами Error. Хотя правило будет сообщать о случаях, где оно может гарантировать, что причина отклонения явно не является Error, оно не будет сообщать о случаях, где существует неопределенность по поводу того, является ли данная причина Error. Для получения дополнительной информации об этом ограничении см. аналогичные ограничения в правиле no-throw-literal.

Чтобы избежать конфликтов между правилами, это правило не сообщает о значениях, отличных от ошибок, используемых в операторах throw в асинхронных функциях, даже если они приводят к отклонению Promise. Для проверки таких случаев используйте правило no-throw-literal.

Когда не стоит его использовать

Если вы используете пользовательские значения, отличные от ошибок, в качестве причин отклонения Promise, вы можете отключить это правило.

Связанные правила

  • no-throw-literal

Версия

Это правило было добавлено в ESLint v3.14.0.

Дополнительное чтение

Объяснения предупреждений | bluebird

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/prefer-promise-reject-errors

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API