1. ホーム
  2. javascript

[解決済み] Intellij Idea 警告 - aysnc/awaitで「返されたプロミスは無視される」。

2023-01-07 06:51:05

質問

私は Express.js を使ったコードで Node.js v7.3. この中で、私は User Router を作成し、リクエストを私の User Controller .

の中でasync/awaitを使っています。 User Controller の中でasync/awaitを使用して非同期呼び出しを行っています。問題は、IntelliJが次のような警告を出すことです。

login()から返されたPromiseは無視されます。

からは何も返さないということです。 login() メソッドから何も返していないことです。

以下はそのコードです。

ユーザルータ.js

router.post('/login', function (req, res, next) {
    userController.login(req, res); // I get the warning here
});

ユーザーコントローラ(UserController.js)

exports.login = async function (req, res) {
    try {
        const verifiedUser = await someFunction(req.body.access_code);
        let user = await User.findOrCreateUser(verifiedUser);
        res.status(200).send(user);
    }
    catch (err) {
        res.status(400).send({success: false, error: err});
    }
};

同じログインメソッドをネイティブプロミスだけで書くと、この警告は出ません。私がここで何かを間違って理解しているのか、それともIntelliJが悪いのでしょうか?

EDIT - です。

Stephenのおかげで、非同期関数がプロミスを返すことは理解できましたが、Intellijが非同期関数から何も返されていないことを識別してその警告を表示しない方が良いのではないでしょうか? .then() の後に login() 関数の後に、この関数が提供する undefined オブジェクトを提供します。つまり、非同期関数から明示的に何かを返さなければ、未定義が返されるということでしょうか?

どのように解決するのですか?

login()メソッドから何も返せていないことです。

async"と宣言された関数は、定義によりPromiseを返します。 たとえば https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

しかし、IDEA の警告はあくまで検査です。警告の上で "alt-enter, right" を押して検査レベルを変更すれば、警告を消すことができます。 検査は「JavaScript -> Probable bugs"」カテゴリにあり、「Result of method call returning a promise is ignored"」と名付けられています。