bluebird
वादों के लिए कॉलबैक एपीआई परिवर्तित करना।
खोज…
टिप्पणियों
वादे की स्थिति है, वे लंबित के रूप में शुरू करते हैं और इसके लिए व्यवस्थित हो सकते हैं:
- जिसका अर्थ है कि गणना को सफलतापूर्वक पूरा पूरा।
- खारिज कर दिया कि अभिकलन विफल हो गया।
वादा वापसी कार्यों को कभी भी फेंकना नहीं चाहिए , उन्हें बदले में अस्वीकार करना चाहिए। एक वादा वापसी समारोह से फेंकना आपको दोनों } catch { और .catch का उपयोग करने के लिए मजबूर करेगा। प्रॉमिस किए गए एपीआई का उपयोग करने वाले लोग वादे फेंकने की उम्मीद नहीं करते हैं। यदि आप सुनिश्चित नहीं हैं कि async API JS में कैसे काम करते हैं - तो कृपया इस उत्तर को पहले देखें।
एक बार में पूरे NodeJS मॉड्यूल को परिवर्तित करना
चलो का कहना है कि रिटर्न कॉलबैक, उदाहरण के लिए यदि आप एक पुस्तकालय है fs NodeJS में मॉड्यूल:
const fs = require("fs");
fs.readFile("/foo.txt", (err, data) => {
if(err) throw err;
console.log(data);
});
हम इसे API को वापस करने वाले वादे में परिवर्तित करना चाहते हैं, ब्लूबर्ड के साथ - हम यह कर सकते हैं promisifyAll का उपयोग promisifyAll जो वादे का उपयोग करने के लिए एक संपूर्ण API परिवर्तित करता है:
const Promise = require("bluebird");
const fs = Promise.promisifyAll(require("fs"));
// this automatically adds `Async` postfixed methods to `fs`.
fs.readFileAsync("/foo.txt").then(console.log);
जो आपको वादों के रूप में पूरे मॉड्यूल का उपयोग करने देता है।
कुछ मॉड्यूलों को बढ़ावा देने के तरीके के बारे में यहां कुछ सामान्य उदाहरण दिए गए हैं:
// The most popular redis module
var Promise = require("bluebird");
Promise.promisifyAll(require("redis"));
// The most popular mongodb module
var Promise = require("bluebird");
Promise.promisifyAll(require("mongodb"));
// The most popular mysql module
var Promise = require("bluebird");
// Note that the library's classes are not properties of the main export
// so we require and promisifyAll them manually
Promise.promisifyAll(require("mysql/lib/Connection").prototype);
Promise.promisifyAll(require("mysql/lib/Pool").prototype);
// Mongoose
var Promise = require("bluebird");
Promise.promisifyAll(require("mongoose"));
// Request
var Promise = require("bluebird");
Promise.promisifyAll(require("request"));
// Use request.getAsync(...) not request(..), it will not return a promise
// mkdir
var Promise = require("bluebird");
Promise.promisifyAll(require("mkdirp"));
// Use mkdirp.mkdirpAsync not mkdirp(..), it will not return a promise
// winston
var Promise = require("bluebird");
Promise.promisifyAll(require("winston"));
// rimraf
var Promise = require("bluebird");
// The module isn't promisified but the function returned is
var rimrafAsync = Promise.promisify(require("rimraf"));
// xml2js
var Promise = require("bluebird");
Promise.promisifyAll(require("xml2js"));
// jsdom
var Promise = require("bluebird");
Promise.promisifyAll(require("jsdom"));
// fs-extra
var Promise = require("bluebird");
Promise.promisifyAll(require("fs-extra"));
// prompt
var Promise = require("bluebird");
Promise.promisifyAll(require("prompt"));
// Nodemailer
var Promise = require("bluebird");
Promise.promisifyAll(require("nodemailer"));
// ncp
var Promise = require("bluebird");
Promise.promisifyAll(require("ncp"));
// pg
var Promise = require("bluebird");
Promise.promisifyAll(require("pg"));
एक एकल NodeJS फ़ंक्शन परिवर्तित करना
आप एक के लिए एक कॉलबैक तर्क के साथ एक एकल समारोह में बदल सकते हैं Promise के साथ -returning संस्करण Promise.promisify इस हां, तो:
const fs = require("fs");
fs.readFile("foo.txt", (err, data) => {
if(err) throw err;
console.log(data);
});
हो जाता है:
const promisify = require("bluebird");
const readFile = promisify(require("fs").readFile));
readFile("foo.txt").then(console.log); // promisified version
किसी अन्य कॉलबैक API को परिवर्तित करना
किसी भी कॉलबैक एपीआई को promisify और promisifyAll करने के वादों को बदलने के लिए promisifyAll संस्करण फिट नहीं होते - आप प्रतिज्ञाकर्ता का उपयोग कर सकते हैं।
वादे आम तौर पर बनाया जा रहा है निर्दिष्ट करने का मतलब है, जब वे बसने - संकेत मिलता है कि इसका मतलब है, जब वे पूरी की (पूरा) या अस्वीकार कर दिया (errored) चरण के लिए स्थानांतरित करने के लिए डेटा उपलब्ध है (और साथ पहुँचा जा सकता .then )।
new Promise((fulfill, reject) => { // call fulfill/reject to mark the promise
someCallbackFunction((data) => {
fulfill(data); // we mark it as completed with the value
})
});
एक उदाहरण के रूप में, चलो वादों का उपयोग करने के लिए setTimeout परिवर्तित करें:
function delay(ms) { // our delay function that resolves after ms milliseconds
return new Promise((resolve, reject) => { // return a new promise
setTimeout(resolve, ms); // resolve it after `ms` milliseconds have passed
})
}
// or more concisely:
const delay = ms => new Promise(r => setTimeout(r, ms));
अब हम इसे एक नियमित वादे के वापस आने के समारोह की तरह उपयोग कर सकते हैं:
delay(1000).then(() => console.log("One second passed")).
then(() => delay(1000)).
then(() => console.log("Another second passed"));