Node.js
कॉलबैक टू प्रॉमिस
खोज…
कॉलबैक को बढ़ावा देना
कॉलबैक आधारित:
db.notification.email.find({subject: 'promisify callback'}, (error, result) => {
if (error) {
console.log(error);
}
// normal code here
});
यह ऊपर की तरह पारंपरिक कॉलबैक-आधारित कोड को प्रॉमिस करने के लिए ब्लूबर्ड के प्रॉमिसिफाइअल विधि का उपयोग करता है। ब्लूबर्ड ऑब्जेक्ट में सभी तरीकों का एक वादा संस्करण बना देगा, उन वादे-आधारित तरीकों के नाम हैं Async ने उन्हें जोड़ा है:
let email = bluebird.promisifyAll(db.notification.email);
email.findAsync({subject: 'promisify callback'}).then(result => {
// normal code here
})
.catch(console.error);
यदि केवल विशिष्ट तरीकों का प्रचार करने की आवश्यकता है, तो बस इसके प्रोमोशन का उपयोग करें:
let find = bluebird.promisify(db.notification.email.find);
find({locationId: 168}).then(result => {
// normal code here
});
.catch(console.error);
कुछ पुस्तकालय हैं (उदाहरण के लिए, MassiveJS), जिसे विधि के तत्काल ऑब्जेक्ट को दूसरे पैरामीटर पर पारित नहीं किया जाता है, तो इसका वादा नहीं किया जा सकता है। उस मामले में, बस उस विधि के तत्काल ऑब्जेक्ट को पास करें जिसे दूसरे पैरामीटर पर प्रॉमिस करने की आवश्यकता है और इसे संदर्भ संपत्ति में संलग्न किया गया है।
let find = bluebird.promisify(db.notification.email.find, { context: db.notification.email });
find({locationId: 168}).then(result => {
// normal code here
});
.catch(console.error);
मैन्युअल रूप से एक कॉलबैक को बढ़ावा देना
कभी-कभी मैन्युअल रूप से कॉलबैक फ़ंक्शन का वादा करना आवश्यक हो सकता है। यह एक ऐसे मामले के लिए हो सकता है जहां कॉलबैक मानक त्रुटि-पहले प्रारूप का पालन नहीं करता है या यदि प्रॉमिस करने के लिए अतिरिक्त तर्क की आवश्यकता होती है:
उदाहरण fexexists (पथ, कॉलबैक) के साथ :
var fs = require('fs');
var existsAsync = function(path) {
return new Promise(function(resolve, reject) {
fs.exists(path, function(exists) {
// exists is a boolean
if (exists) {
// Resolve successfully
resolve();
} else {
// Reject with error
reject(new Error('path does not exist'));
}
});
});
// Use as a promise now
existsAsync('/path/to/some/file').then(function() {
console.log('file exists!');
}).catch(function(err) {
// file does not exist
console.error(err);
});
सेटटाइमआउट का वादा किया गया
function wait(ms) {
return new Promise(function (resolve, reject) {
setTimeout(resolve, ms)
})
}