मैं एक जीईटी अनुरोध से 2 MySQL प्रश्न बनाना चाहता हूं, परिणामों को एक साथ बुनना और उन्हें वापस करना चाहता हूं। लेकिन मुझे पहली क्वेरी के परिणाम को अगले तब() ब्लॉक में पास करने में कठिनाई हो रही है।
const express = require('express');
const router = express.Router();
const axios = require('axios');
const con = require('../../db');
router.get('/:id', (req, res, next) => {
axios.get('/').then(docs => { //get one book by its id number
const sql = "SELECT title, line, mage_edition FROM books WHERE id=" + req.params.id;
con.query(sql, (err, result) => {
if (err) {
throw err;
}
return result; //"result" shows proper value here
});
}).then(docs => { //get all the listings that appear inside that book
//How do I get "result" here?
const sql2 = "SELECT l.entry_id, e.title, e.kind, e.sort FROM links l INNER JOIN entries e ON l.entry_id = e.id WHERE book_id=" + req.params.id;
con.query(sql2, (err, result2) => {
if (err) {
throw err;
}
//combine result and result2, then give back with res.status(200).json()
})
});
});
module.exports = router;
किसी भी तरह की सहायता का स्वागत किया जाएगा। मैंने एसिंक्रोनस जावास्क्रिप्ट पर एक प्रशिक्षण वीडियो श्रृंखला समाप्त की लेकिन मैं इसे समझ नहीं सकता।
2 जवाब
then()
ब्लॉक के भीतर परिणाम वापस करने के लिए return
कुंजी शब्द का उपयोग करें। यह m अगले ब्लॉक के लिए उपलब्ध डेटा होना चाहिए।
ध्यान रखें कि यदि आपको तत्कालीन ब्लॉकों के क्रम में निष्पादन की आवश्यकता है, तो आपको हल किए गए मानों के बजाय एक वादा वापस करना होगा
एक .then
से अगले .then
पर लौटने के लिए आपको previous
से मान वापस करना चाहिए। आपका कोड काम नहीं कर रहा है क्योंकि आप कॉलबैक फ़ंक्शन से अपना परिणाम वापस कर रहे हैं। आप कॉलबैक फ़ंक्शन से मान वापस नहीं कर सकते।
जांचें कि आपका .query
फ़ंक्शन कोई वादा वापस करता है या नहीं। अगर हाँ तो आपको कुछ ऐसा करना चाहिए const result = awati con.query(sql);
.
या, आप अपने .query
फ़ंक्शन का वादा कर सकते हैं और फिर उसकी प्रतीक्षा कर सकते हैं।