如何在intellij中解决“忽略承诺”警告但仅针对特定功能?

问题描述

我的项目中有一个函数 (foo),它返回一个 promise,但通常不需要等待 promise 解决,因此永远不会附加 .then() 处理程序。 Intellij IDEA 很有帮助,因为它总是用警告标记它。这可以通过添加删除

// JSIgnoredPromiseFromCall

文件的顶部。但这将使它忽略所有被忽略的承诺,这不是我们想要的。为每个语句添加注释也不理想,因为该函数经常被调用,所以它只会污染源代码

有没有办法用文件级 suppeRSS 注释指定要忽略的确切函数?例如

// noinspection JSIgnoredPromiseFromCall[foo]

解决方法

我怀疑您是否可以在函数级别指定这一点,而不是首先不让函数返回承诺,这就是我将如何解决这个问题。例如:

function foo() {
    const promise = /*...foo's original logic...*/;
    promise.catch(error => {
        // ...report the error if that's appropriate...
        // **DO** include this handler even if you don't report it,// to avoid unhandled rejection errors
    });
}

请注意,foo 不会返回 promise。承诺完全在 foo 内处理。

如果在某些情况下您确实需要使用 promise 而其他情况下您不需要,请创建两个函数并根据情况使用适当的一个:

function originalFoo() {
    return /*...foo's original logic...*/;
}

function silentFoo() {
    originalFoo().catch(error => {
        // ...report the error if that's appropriate...
        // **DO** include this handler even if you don't report it,// to avoid unhandled rejection errors
    });
}