отдавать-предпочтение-отказам-promise-с-ошибками
Требуется использовать объекты Error в качестве причин отказа Promise
Считается хорошей практикой передавать только экземпляры встроенного объекта Error в функцию reject() для пользовательских ошибок в Promise. Объекты Error автоматически хранят трассировку стека, которая может быть использована для отладки ошибки, определив, откуда она произошла. Если Promise отклоняется с не-Error значением, определить место возникновения отклонения может быть сложно.
Подробное описание правила
Это правило призвано гарантировать, что Promise отклоняются только с объектами Error.
Параметры
Это правило принимает один необязательный аргумент объекта:
-
allowEmptyReject: true(falseпо умолчанию) разрешает вызовыPromise.reject()без аргументов.
Примеры неправильного кода для этого правила:
/*eslint prefer-promise-reject-errors: "error"*/
;
;
;
new Promise(function(resolve, reject) {
;
});
new Promise(function(resolve, reject) {
;
});
Примеры правильного кода для этого правила:
/*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.
/*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, вы можете отключить это правило.
Связанные правила
Версия
Это правило было добавлено в ESLint v3.14.0.
Дополнительное чтение
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/prefer-promise-reject-errors