2016-12-22 10 views
13

を待って、私はのNode.js V7.3に自分のコードにExpress.jsを使用していて、「約束が返さは無視されます」。これで私はを作成し、要求を私のUser Controllerに転送します。のIntelliJアイデア警告 - aysnc/

私は非同期呼び出しを行うためにUser Controllerの中でasync/awaitを使用しています。問題はIntelliJが私に警告を与えているということです。

login()から返される約束は無視されます。

login()メソッドからは何も返されません。

ここでのコードだ -

UserRouter.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 - のIntelliJは何も非同期関数から返されていないされていることを識別し、表示されない場合@Stephenに

おかげで、私は、非同期関数が約束を返しますが、それが良いではないであろうことを理解しますこの警告は、login()関数の後に.then()をチェーンすると、then結果にundefinedオブジェクトを提供するためです。つまり、非同期関数から何かを明示的に返していない場合、undefinedが返されます。

答えて

5

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

"async"と宣言された関数は、定義によってPromiseを返します。 例を参照ください。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

ただし、IDEAの警告は検査のみです。警告に「alt-enter、right」を押して、検査レベルを変更して警告を消すことができます。 検査は「JavaScript - > Probable bugs」カテゴリにあり、「約束を返すメソッド呼び出しの結果は無視されます」という名前です。

4

userController.login()関数は約束を返しますが、約束の結果ではthen()関数を使用して何もしていません。例えば

userController.login(req, res).then(() => { 
    // Do something after login is successful. 
}); 

またはES2017の構文で:

await userController.login(req, res); 

あなたが実際にそこに何かをしたくない場合は、私はあなただけの警告を無視することができますね。約束の上でthen()関数を使用しないのは、通常、コードの匂いなので、警告が主にそこにあります。

関連する問題