Node.js
Async / का इंतजार
खोज…
परिचय
Async / प्रतीक्षा एक ऐसे कीवर्ड का एक समूह है जो कॉलबैक ( कॉलबैक नरक ) या वादा-चेंजिंग ( .then().then().then()
) .then().then().then()
) पर भरोसा किए बिना प्रक्रियात्मक तरीके से एसिंक्रोनस कोड लिखने की अनुमति देता है।
यह वादा करने के संकल्प तक एक async फ़ंक्शन की स्थिति को निलंबित करने के लिए await
कीवर्ड का उपयोग करके काम करता है, और इस तरह के async कार्यों को घोषित करने के लिए async
कीवर्ड का उपयोग करता है, जो एक वादा वापस करते हैं।
Async / wait, flag --harmony-async-await
का उपयोग करके डिफ़ॉल्ट रूप से या 7 से नोड.जेएस 8 से उपलब्ध है।
Async Functions with Try-Catch Error हैंडलिंग
एसिंक्स / वेट सिंटैक्स की सबसे अच्छी विशेषताओं में से एक यह है कि मानक कोशिश-कैच कोडिंग शैली संभव है, जैसे आप सिंक्रोनाइज़ कोड लिख रहे थे।
const myFunc = async (req, res) => {
try {
const result = await somePromise();
} catch (err) {
// handle errors here
}
});
यहाँ एक उदाहरण है एक्सप्रेस और वादा- mysql:
router.get('/flags/:id', async (req, res) => {
try {
const connection = await pool.createConnection();
try {
const sql = `SELECT f.id, f.width, f.height, f.code, f.filename
FROM flags f
WHERE f.id = ?
LIMIT 1`;
const flags = await connection.query(sql, req.params.id);
if (flags.length === 0)
return res.status(404).send({ message: 'flag not found' });
return res.send({ flags[0] });
} finally {
pool.releaseConnection(connection);
}
} catch (err) {
// handle errors here
}
});
वादे और Async / Await के बीच तुलना
वादों का उपयोग कर समारोह:
function myAsyncFunction() {
return aFunctionThatReturnsAPromise()
// doSomething is a sync function
.then(result => doSomething(result))
.catch(handleError);
}
तो यहाँ है जब Async / Await हमारे फ़ंक्शन को साफ़ करने के लिए कार्रवाई में प्रवेश करता है:
async function myAsyncFunction() {
let result;
try {
result = await aFunctionThatReturnsAPromise();
} catch (error) {
handleError(error);
}
// doSomething is a sync function
return doSomething(result);
}
तो कीवर्ड async
return new Promise((resolve, reject) => {...}
लिखने के समान होगा।
और then
कॉलबैक में अपना परिणाम प्राप्त करने के लिए इसी तरह की await
करें।
यहाँ मैं एक बहुत संक्षिप्त gif छोड़ता हूँ जिसे देखने के बाद मन में कोई संदेह नहीं रह जाएगा:
कॉलबैक से प्रगति
शुरुआत में कॉलबैक थे, और कॉलबैक ठीक थे:
const getTemperature = (callback) => {
http.get('www.temperature.com/current', (res) => {
callback(res.data.temperature)
})
}
const getAirPollution = (callback) => {
http.get('www.pollution.com/current', (res) => {
callback(res.data.pollution)
});
}
getTemperature(function(temp) {
getAirPollution(function(pollution) {
console.log(`the temp is ${temp} and the pollution is ${pollution}.`)
// The temp is 27 and the pollution is 0.5.
})
})
लेकिन कॉलबैक के साथ कुछ वास्तव में निराशाजनक मुद्दे थे इसलिए हम सभी ने वादों का उपयोग करना शुरू कर दिया।
const getTemperature = () => {
return new Promise((resolve, reject) => {
http.get('www.temperature.com/current', (res) => {
resolve(res.data.temperature)
})
})
}
const getAirPollution = () => {
return new Promise((resolve, reject) => {
http.get('www.pollution.com/current', (res) => {
resolve(res.data.pollution)
})
})
}
getTemperature()
.then(temp => console.log(`the temp is ${temp}`))
.then(() => getAirPollution())
.then(pollution => console.log(`and the pollution is ${pollution}`))
// the temp is 32
// and the pollution is 0.5
यह थोड़ा बेहतर था। अंत में, हमें async / प्रतीक्षा मिली। जो अभी भी हुड के तहत वादों का उपयोग करता है।
const temp = await getTemperature()
const pollution = await getAirPollution()
प्रतीक्षा पर निष्पादन रोक देता है
यदि वादा कुछ भी वापस नहीं करता है, तो async कार्य को await
का उपयोग करके पूरा किया जा सकता है।
try{
await User.findByIdAndUpdate(user._id, {
$push: {
tokens: token
}
}).exec()
}catch(e){
handleError(e)
}