வாக்குறுதிகளுக்கு அறிமுகம்
Node.js இல், வாக்குறுதிகள் பாரம்பரிய கால்பேக்குகளுடன் ஒப்பிடும்போது அசிங்க்ரோனஸ் செயல்பாடுகளைக் கையாள ஒரு தூய்மையான வழியை வழங்குகின்றன.
வாக்குறுதிகள் ஒரு அசிங்க்ரோனஸ் செயல்பாட்டின் நிறைவு (அல்லது தோல்வி) மற்றும் அதன் முடிவைக் குறிக்கின்றன.
நிலுவையில்
ஆரம்ப நிலை, செயல்பாடு முடிவடையவில்லை
நிறைவேறியது
செயல்பாடு வெற்றிகரமாக முடிந்தது
நிராகரிக்கப்பட்டது
செயல்பாடு தோல்வியடைந்தது
முக்கிய குறிப்பு:
ஒரு வாக்குறுதி தீர்மானிக்கப்பட்ட பிறகு (நிறைவேறியது அல்லது நிராகரிக்கப்பட்டது), அதன் நிலை மாறாது.
வாக்குறுதிகளைப் பயன்படுத்துவதன் நன்மைகள்
கால்பேக்குகளுடன்
getUser(id, (err, user) => {
if (err) return handleError(err);
getOrders(user.id, (err, orders) => {
if (err) return handleError(err);
// Process orders...
});
});
வாக்குறுதிகளுடன்
getUser(id)
.then(user => getOrders(user.id))
.then(orders => processOrders(orders))
.catch(handleError);
சமதள குறியீடு கட்டமைப்பு
கால்பேக் நரகத்தைத் தவிர்க்கிறது
சிறந்த பிழை கையாளுதல்
ஒற்றை .catch() உடன்
செயல்பாடுகளை இணைக்க எளிதானது
கூட்டு மற்றும் சங்கிலி செயல்பாடுகள்
இணையான செயல்பாடுகள்
உள்ளமைக்கப்பட்ட ஆதரவு
கால்பேக் நரக எடுத்துக்காட்டு (வாக்குறுதிகள் இல்லாமல்)
fs.readFile('file1.txt', (err, data1) => {
if (err) throw err;
fs.readFile('file2.txt', (err, data2) => {
if (err) throw err;
fs.readFile('file3.txt', (err, data3) => {
if (err) throw err;
// Use data1, data2, and data3
});
});
});
பிரச்சனைகள்:
- கூடு கட்டிய குறியீடு பராமரிப்பது கடினம்
- பிழை கையாளுதல் மீண்டும் மீண்டும்
- வாசிப்புத்திறன் மோசமானது
- செயல்பாடுகளை இணைக்க கடினம்
வாக்குறுதிகளை உருவாக்குதல் மற்றும் பயன்படுத்துதல்
வாக்குறுதிகள் Promise கட்டமைப்பாளரைப் பயன்படுத்தி உருவாக்கப்படலாம், இது இரண்டு அளவுருக்களைக் கொண்ட ஒரு செயல்பாட்டை ஏற்கும்: resolve மற்றும் reject.
அடிப்படை வாக்குறுதி உருவாக்கம்
// Create a new Promise
const myPromise = new Promise((resolve, reject) => {
// Simulate an async operation (e.g., API call, file read)
setTimeout(() => {
const success = Math.random() > 0.5;
if (success) {
resolve('Operation completed successfully');
} else {
reject(new Error('Operation failed'));
}
}, 1000); // Simulate delay
});
// Using the Promise
myPromise
.then(result => console.log('Success:', result))
.catch(error => console.error('Error:', error.message));
எடுத்துக்காட்டு: வாக்குறுதிகளுடன் கோப்பு படித்தல்
const fs = require('fs').promises;
const promise1 = Promise.resolve('First result');
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Second result'), 1000));
const promise3 = fs.readFile('myfile.txt', 'utf8');
Promise.all([promise1, promise2, promise3])
.then(results => {
console.log('Results:', results);
// results[0] is from promise1
// results[1] is from promise2
// results[2] is the content of myfile.txt
})
.catch(error => {
console.error('Error in one of the promises:', error);
});
வாக்குறுதி சங்கிலியாக்கம்
வாக்குறுதிகள் வரிசையில் அசிங்க்ரோனஸ் செயல்பாடுகளை இயக்க சங்கிலியாக்கப்படலாம், ஒவ்வொரு .then() முந்தைய செயல்பாட்டின் முடிவைப் பெறும்.
எடுத்துக்காட்டு: வாக்குறுதி சங்கிலியாக்கம்
function getUser(userId) {
return new Promise((resolve, reject) => {
// Simulating database call
setTimeout(() => {
resolve({ id: userId, name: 'John' });
}, 1000);
});
}
function getUserPosts(user) {
return new Promise((resolve, reject) => {
// Simulating API call
setTimeout(() => {
resolve(['Post 1', 'Post 2', 'Post 3']);
}, 1000);
});
}
// Chain the promises
getUser(123)
.then(user => {
console.log('User:', user);
return getUserPosts(user);
})
.then(posts => {
console.log('Posts:', posts);
})
.catch(error => {
console.error('Error:', error);
});
வாக்குறுதி முறைகள்
நிகழ்வு முறைகள்
- then(onFulfilled, onRejected) - நிறைவேறுதல் அல்லது நிராகரிப்பைக் கையாளுகிறது
- catch(onRejected) - நிராகரிப்புகளைக் கையாளுகிறது
- finally(onFinally) - வாக்குறுதி தீர்மானிக்கப்பட்ட பிறகு இயங்கும்
நிலையான முறைகள்
- Promise.all(iterable) - அனைத்து வாக்குறுதிகளும் தீர்க்கப்படும் வரை காத்திருக்கிறது
- Promise.race(iterable) - முதல் வாக்குறுதி தீர்மானிக்கப்படும் வரை காத்திருக்கிறது
- Promise.allSettled(iterable) - அனைத்தும் தீர்மானிக்கப்படும் வரை காத்திருக்கிறது
பயன்பாட்டு முறைகள்
- Promise.resolve(value) - தீர்க்கப்பட்ட வாக்குறுதியை உருவாக்குகிறது
- Promise.reject(reason) - நிராகரிக்கப்பட்ட வாக்குறுதியை உருவாக்குகிறது
Promise.then()
then() முறை இரண்டு வரை வாதங்களை எடுக்கும். வாதங்கள் வாக்குறுதிக்கான வெற்றி மற்றும் தோல்வி நிகழ்வுகளுக்கான கால்பேக் செயல்பாடுகள்.
myPromise
.then(
result => console.log(result),
error => console.error(error)
);
Promise.catch()
catch() முறை நிராகரிக்கப்பட்ட வாக்குறுதிகளைக் கையாளுகிறது மற்றும் .then(null, errorHandler) க்கு சமமானது.
myPromise
.then(result => console.log(result))
.catch(error => console.error(error));
Promise.finally()
finally() முறை வாக்குறுதி நிறைவேற்றப்பட்டதா அல்லது நிராகரிக்கப்பட்டதா என்பதைப் பொருட்படுத்தாமல் குறியீட்டை இயக்குகிறது.
myPromise
.then(result => console.log(result))
.catch(error => console.error(error))
.finally(() => console.log('Operation completed'));
Promise.all() இணையான செயல்பாட்டிற்கு
Promise.all() பல வாக்குறுதிகளை இணையாக இயக்கப் பயன்படுத்தப்படுகிறது, மேலும் அனைத்தும் முடியும் வரை காத்திருக்கிறது. எந்த வாக்குறுதி நிராகரித்தாலும் அது விரைவாக தோல்வியடைகிறது.
எடுத்துக்காட்டு: இணையாக பல வாக்குறுதிகளை இயக்குதல்
const fs = require('fs').promises;
const promise1 = Promise.resolve('First result');
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Second result'), 1000));
const promise3 = fs.readFile('data.txt', 'utf8');
Promise.all([promise1, promise2, promise3])
.then(results => {
console.log('Results:', results);
// results[0] is from promise1
// results[1] is from promise2
// results[2] is the content of data.txt
})
.catch(error => {
console.error('Error in one of the promises:', error);
});
Promise.race() முதல் முடிவுக்கு
Promise.race() முதல் தீர்மானிக்கப்பட்ட வாக்குறுதியின் முடிவு தேவைப்படும் போது பயனுள்ளதாக இருக்கும், அது நிறைவேற்றப்பட்டதா அல்லது நிராகரிக்கப்பட்டதா என்பதைப் பொருட்படுத்தாமல்.
எடுத்துக்காட்டு: Promise.race() உடன் நேரம்கடத்தல் முறை
const promise1 = new Promise(resolve => setTimeout(() => resolve('First result'), 1000));
const promise2 = new Promise(resolve => setTimeout(() => resolve('Second result'), 500));
Promise.race([promise1, promise2])
.then(result => {
console.log('Fastest result:', result);
// Will log 'Second result' because promise2 is faster
});
வாக்குறுதிகளில் பிழை கையாளுதல்
சரியான பிழை கையாளுதல் முக்கியமானது. வாக்குறுதிகள் பிழைகளைக் கையாள பல வழிகளை வழங்குகின்றன:
எடுத்துக்காட்டு: வாக்குறுதியில் பிழை கையாளுதல்
function fetchData() {
return new Promise((resolve, reject) => {
// Simulating an error
reject(new Error('Network error'));
});
}
fetchData()
.then(
data => console.log('Data:', data),
error => console.log('Error handled in then:', error.message)
);
// Alternative method using catch
fetchData()
.then(data => console.log('Data:', data))
.catch(error => console.log('Error handled in catch:', error.message));
சிறந்த நடைமுறை:
எப்போதும் வாக்குறுதிகளுடன் .catch() ஐப் பயன்படுத்தி பிழை கையாளுதலைச் சேர்க்கவும், இது கையாளப்படாத வாக்குறுதி நிராகரிப்புகளைத் தடுக்கும், இது அமைதியான தோல்விகள் மற்றும் நினைவக கசிவுகளுக்கு வழிவகுக்கும்.
சுருக்கம்
வாக்குறுதிகள்
அசிங்க்ரோனஸ் செயல்பாடுகளுக்கான தூய்மையான குறியீடு
சங்கிலியாக்கம்
பல அசிங்க்ரோனஸ் செயல்பாடுகளை இணைக்க உதவுகிறது
இணையானம்
Promise.all() மற்றும் Promise.race()
பிழை கையாளுதல்
ஒற்றை .catch() உடன் மையப்படுத்தப்பட்டது
முக்கிய புள்ளிகள்:
- வாக்குறுதிகள் கால்பேக் நரகத்தைத் தவிர்க்கின்றன
- சங்கிலியாக்கம் வரிசைச் செயல்பாடுகளை எளிதாக்குகிறது
- Promise.all() இணையான செயல்பாட்டிற்கு உதவுகிறது
- எப்போதும் .catch() உடன் பிழைகளைக் கையாளவும்
- finally() சுத்தம் செய்யும் குறியீட்டிற்கு பயனுள்ளதாக இருக்கும்
பயிற்சி
சரியான நிலையை தேர்ந்தெடுக்கவும்.
ஒரு வாக்குறுதி மூன்று நிலைகளில் ஒன்றில் இருக்கலாம்: நிலுவையில், ______, அல்லது நிராகரிக்கப்பட்டது.