2016-12-22 10 views
13

का इंतजार मैं Express.js उपयोग कर रहा हूँ मेरे कोड में Node.js v7.3 के साथ। इस में मैंने User Router बनाया है जो मेरे User Controller के अनुरोधों को आगे बढ़ाता है।IntelliJ विचार चेतावनी - "वादा लौटे नजरअंदाज कर दिया है" aysnc साथ/

मैं एसिंक्रोनस कॉल करने के लिए User Controller के अंदर async/प्रतीक्षा कर रहा हूं। समस्या यह है कि इंटेलिजे मुझे एक चेतावनी देता है कि

लॉगिन() से वापस आने वाले वादे को अनदेखा किया जाता है।

बात यह है कि मैं 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}); 
    } 
}; 

अगर मैं देशी वादों का उपयोग कर उसके बाद ही मैं डॉन एक ही लॉगिन विधि लिखना यह चेतावनी नहीं मिलती है। क्या मैं यहां कुछ गलत समझ रहा हूं या इंटेलिजे गलती पर है?

संपादित करें -

@Stephen के लिए धन्यवाद, मैं समझता हूँ कि एक async समारोह एक वादा देता है, लेकिन यह बेहतर नहीं होगा कि अगर Intellij को दिखाता है कि कुछ भी नहीं async समारोह से वापस आ जा रहा है और दिखाई नहीं देता यह चेतावनी क्योंकि जब मैं login() फ़ंक्शन के बाद .then() श्रृंखला करता हूं, तो यह परिणामस्वरूप undefined ऑब्जेक्ट प्रदान करता है। इसका मतलब है कि अगर हम एसिंक फ़ंक्शन से कुछ वापस नहीं लौटाते हैं तो अपरिभाषित वापस आ जाता है?

उत्तर

5

बात यह है कि मैं लॉगिन() विधि से कुछ भी वापस नहीं कर रहा हूं।

एक फ़ंक्शन घोषित किया गया "async" परिभाषा के अनुसार एक वादा करता है। उदाहरण के लिए देखें https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

हालांकि आईडीईए चेतावनी केवल एक निरीक्षण है। आप चेतावनी पर "alt-enter, right" दबा सकते हैं और चेतावनी को दूर करने के लिए निरीक्षण स्तर को बदल सकते हैं। निरीक्षण "जावास्क्रिप्ट -> संभावित बग" श्रेणी में है और इसका नाम दिया गया है "एक वादे वापस करने वाले विधि कॉल का परिणाम अनदेखा किया जाता है"।

4

userController.login() फ़ंक्शन एक वादा देता है, लेकिन आप इसके then() फ़ंक्शन का उपयोग करके वादे से परिणाम के साथ कुछ भी नहीं कर रहे हैं।

उदाहरण के लिए:

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

या ES2017 वाक्य रचना में:

await userController.login(req, res); 

आप नहीं है वास्तव में वहाँ कुछ भी करना चाहते हैं, मुझे लगता है कि तुम सिर्फ चेतावनी को अनदेखा कर सकते हैं। चेतावनी ज्यादातर वहां होती है क्योंकि then() फ़ंक्शन का उपयोग किसी वचन पर आमतौर पर कोड गंध नहीं होता है।

संबंधित मुद्दे