私は使用していますエクスプレス私のコードではNode.jsUser Router
v7.3。ここでは、リクエストを に転送する を作成しましたUser Controller
。
非同期呼び出しを行うためにasync/awaitを使用していますUser Controller
。問題は、IntelliJが次のような警告を出すことです。
login() から返された Promise は無視されます。
問題は、メソッドから何も返さないことですlogin()
。
コードは次のとおりです -
ユーザールーター.js
router.post('/login', function (req, res, next) {
userController.login(req, res); // I get the warning here
});
ユーザーコントローラ.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});
}
};
ネイティブの Promise のみを使用して同じログイン メソッドを記述すると、この警告は表示されません。ここで何か間違った理解をしているのでしょうか、それとも IntelliJ に問題があるのでしょうか?
編集 -
@Stephen のおかげで、非同期関数が promise を返すことは理解できましたが、関数.then()
の後にa をチェーンすると、 then の結果にオブジェクトが提供されるため、Intellij が非同期関数から何も返されないことを識別してその警告を表示しない方がよいのではないでしょうか。つまり、非同期関数から明示的に何かを返さない場合は、undefined が返されるということですか?login()
undefined
ベストアンサー1
「void」演算子を使用する必要があります。
MDNより: void は、「undefined と評価される式が必要な場所に値を生成する式を評価する」ためのものです。
router.post('/login', function (req, res, next) {
void userController.login(req, res); // Warning will not be shown now
});