ESLint 可以帮助您防止未处理的承诺拒绝吗?

Lon*_*est 2 javascript node.js custom-error-handling ecmascript-next unhandled-promise-rejection

eslint 是否有能力警告防止未处理的承诺拒绝的地方?

不推荐使用未处理的承诺拒绝。将来,未处理的承诺拒绝将使用非零退出代码终止 Node.js 进程。- DEP0018

你知道吗,我有点喜欢引擎目前处理 Unhandled-Promise-Rejections 的方式;因为当您遇到 Unhandled-Promise-Rejection 时,您的整个服务不会崩溃,而是会继续运行,并且只有依赖于错误承诺实例的部分无法完成。假设错误是由程序员在验证期间未预料到的某些用户输入引起的。有异常的异步函数继续服务于其他调用(那些没有相同的意外用户输入的调用)。是的,此时程序中存在垃圾,以永远等待永远无法解决的等待的形式,但对我来说,这比让服务完全崩溃更强大。

无论如何,我想其他人已经决定完美比稳健更重要。

因此,是时候让我的代码变得丑陋和完美了,.catch(()=>{});在我之前看起来像 MOP&GLOW 一样干净的代码中的所有等待之后不久附加。

ESlint 是否提供任何帮助我在没有捕获的情况下定位承诺的东西?是否有任何规范添加正在进行中,以解决这种丑陋和不便?

就个人而言,我希望我可以将引擎配置为仅终止来自 UnhandledPromiseRejection 的承诺链中的代码。我当然希望比将所有这些添加.catch(()=>{})到我等待的所有异步函数调用中更容易解决这个问题。

m90*_*m90 7

ESLint 本身不具备您正在寻找的功能,但有一个非常流行的插件,名为eslint-plugin-promise

具体来说,捕获或返回规则可以满足您的要求:

确保每次将 then() 应用于 Promise 时,也会应用 catch()。如果您兑现该承诺,则有例外情况。

有效的

myPromise.then(doSomething).catch(errors)
myPromise
  .then(doSomething)
  .then(doSomethingElse)
  .catch(errors)
function doSomethingElse() {
  return myPromise.then(doSomething)
}
Run Code Online (Sandbox Code Playgroud)

无效的

myPromise.then(doSomething)
myPromise.then(doSomething, catchErrors) // catch() may be a little better
function doSomethingElse() {
  return myPromise.then(doSomething)
}
Run Code Online (Sandbox Code Playgroud)


Dim*_*try 7

我想知道为什么没有人提到“typescript-eslint”中的“无浮动承诺”规则,该规则强制所有承诺都使用async/await或进行适当处理then/catch- https://github.com/typescript-eslint/typescript-eslint/blob/ master/packages/eslint-plugin/docs/rules/no-floating-promises.md 大概应该叫做“No unhandled promises”。:)