Ido*_*Ran 3 typescript q tslint
我从TSLint收到此错误,并且试图了解为什么它在抱怨。
我有一个函数,该函数调用另一个返回诺言的方法,但是第一个函数不返回诺言,因为它只是等待其完成并更新内部状态。
我已将其简化为此函数,仅用于Q()模拟返回承诺的调用。
export function DoSomethingAsync(): void {
Q().then(r => {
console.log('test');
}).catch(err => {
log.error("wow");
}).finally(() => {
log.info("at finally")
});
}
Run Code Online (Sandbox Code Playgroud)
tslint现在在我的项目上运行时,出现以下错误:
错误:C:/dev/local_cache_service.ts [31,5]:必须正确处理承诺
如果我取消finally通话,tslint会顺利通过。
export function DoSomethingAsync(): void {
Q().then(r => {
console.log('test');
}).catch(err => {
log.error("wow");
});
}
Run Code Online (Sandbox Code Playgroud)
当我在种子打字稿项目上创建相同的功能时,此行为不会重现...
这是无浮动承诺规则的投诉。根据其说明:
创建一个Promise而不存储或返回它可能会使其他代码独立于其结果运行。根据外部时序因素,这可能导致意外的和/或不确定的行为。
通常最好从启动它们的函数中返回Promises,然后在调用代码中对其进行处理。
no-unused-expression除了使用此规则外,还可以显示更多的浮动承诺。
特别是在您的情况下,这是因为您正在该.finally块之后的一个块中运行代码.catch。规则认为这很危险,因为如果.finally引发的代码出错,则调用代码将无法对其进行处理。
对您而言,最好的做法是return兑现承诺,因此该函数的返回类型为Promise / Q而不是void。
提示:您可以运行tslint -t stylish或tslint -t verbose查看规则名称及其投诉!
| 归档时间: |
|
| 查看次数: |
1846 次 |
| 最近记录: |