दिलचस्प पोस्ट
छवि के पहलू अनुपात को बनाए रखते हुए आप <div> को भरने के लिए एक छवि कैसे बढ़ाएं? नि: शुल्क के बाद चर के लिए चर सेट करना MIN / MAX बनाम ऑर्डर बाय और LIMIT एएसपी एमवीसी आईआईएस 7 में परिणाम: HTTP त्रुटि 403.14 – निषिद्ध मैं C # से C ++ / CLI कैसे कॉल करूं? दो जावा दिनांक उदाहरणों के बीच अंतर की गणना करना मैं जावास्क्रिप्ट में कोड की एक से अधिक पंक्ति में स्ट्रिंग कैसे तोड़ूंगा? मिलान कोष्ठक को संतुलित करने के लिए RegEx का उपयोग करना विंडोज फोन 7 (WP7) क्लिक पर एक बटन का पृष्ठभूमि रंग बदलें आर के एक नए संस्करण को स्थापित करने का दर्द रहित तरीका है? एंड्रॉइड कैसे रिसाल फ़ोल्डर में डाल कच्चे संसाधनों तक पहुंच प्राप्त करने के लिए? डिफ़ॉल्ट वैरिएबल वैल्यू window.localStorage बनाम chrome.storage.local UUID कितना अनूठा है? बाइट ऑर्डर मार्क स्क्रू अप फाइल पढ़ने में जावा

कैसे वादे के साथ पूर्व परिणामों को चेन और साझा करने के लिए

मैं ब्लूबर्ड पुस्तकालय का उपयोग कर रहा हूं और मुझे HTTP अनुरोधों की एक श्रृंखला बनाने की आवश्यकता है और अगले HTTP अनुरोध के कुछ प्रतिक्रिया डेटा की आवश्यकता है। मैंने एक फ़ंक्शन बनाया है जो callhttp() नामक मेरे अनुरोधों को callhttp() । यह एक यूआरएल और एक पोस्ट का शरीर लेता है।

मैं इसे इस तरह बुला रहा हूं:

 var payload = '{"Username": "joe", "Password": "password"}'; var join = Promise.join; join( callhttp("172.16.28.200", payload), callhttp("172.16.28.200", payload), callhttp("172.16.28.200", payload), function (first, second, third) { console.log([first, second, third]); }); 

पहला अनुरोध एक एपीआई कुंजी प्राप्त करता है, जिसे दूसरे अनुरोध पर जाने की आवश्यकता होती है और इसी तरह। पहले अनुरोध से प्रतिक्रिया डेटा कैसे प्राप्त करें?

अद्यतन करें

यह callhttp फ़ंक्शन है:

 var Promise = require("bluebird"); var Request = Promise.promisify(require('request')); function callhttp(host, body) { var options = { url: 'https://' + host + '/api/authorize', method: "POST", headers: { 'content-type': 'application/json' }, body: body, strictSSL: false }; return Request(options).spread(function (response) { if (response.statusCode == 200) { // console.log(body) console.log(response.connection.getPeerCertificate().subject.CN) return { data: response.body }; } else { // Just an example, 200 is not the only successful code throw new Error("HTTP Error: " + response.statusCode ); } }); } 

वेब के समाधान से एकत्रित समाधान "कैसे वादे के साथ पूर्व परिणामों को चेन और साझा करने के लिए"

निर्भर वादों के लिए कुछ मॉडल हैं और एक से अगले डेटा तक पास कर रहे हैं जो सबसे अच्छा काम करता है उस पर निर्भर करता है कि क्या आपको अगली कॉल में पिछले डेटा की आवश्यकता है या क्या आपको सभी पूर्व डेटा तक पहुंच की आवश्यकता है या नहीं। यहां कई मॉडल हैं:

अगले के एक के लिए फ़ीड परिणाम

 callhttp(url1, data1).then(function(result1) { // result1 is available here return callhttp(url2, data2); }).then(function(result2) { // only result2 is available here return callhttp(url3, data3); }).then(function(result3) { // all three are done now, final result is in result3 }); 

मध्यवर्ती परिणाम उच्च स्कोप में निर्दिष्ट करें

 var r1, r2, r3; callhttp(url1, data1).then(function(result1) { r1 = result1; return callhttp(url2, data2); }).then(function(result2) { r2 = result2; // can access r1 or r2 return callhttp(url3, data3); }).then(function(result3) { r3 = result3; // can access r1 or r2 or r3 }); 

एक वस्तु में परिणाम एकत्रित करें

 var results = {}; callhttp(url1, data1).then(function(result1) { results.result1 = result1; return callhttp(url2, data2); }).then(function(result2) { results.result2 = result2; // can access results.result1 or results.result2 return callhttp(url3, data3); }).then(function(result3) { results.result3 = result3; // can access results.result1 or results.result2 or results.result3 }); 

नेस्ट, तो सभी पिछला परिणाम तक पहुंचा जा सकता है

 callhttp(url1, data1).then(function(result1) { // result1 is available here return callhttp(url2, data2).then(function(result2) { // result1 and result2 available here return callhttp(url3, data3).then(function(result3) { // result1, result2 and result3 available here }); }); }) 

चेन को स्वतंत्र टुकड़ों में तोड़ो, परिणाम एकत्र करें

यदि चेन के कुछ हिस्सों को स्वतंत्र रूप से आगे बढ़ना है, तो दूसरे के बाद एक के बजाय, आप उन्हें अलग से लॉन्च कर सकते हैं और Promise.all() का उपयोग कर सकते हैं, यह जानने के लिए कि ये कई टुकड़े किए गए हैं और तब आपके पास उन स्वतंत्र टुकड़ों के सभी आंकड़े होंगे :

 var p1 = callhttp(url1, data1); var p2 = callhttp(url2, data2).then(function(result2) { return someAsync(result2); }).then(function(result2a) { return someOtherAsync(result2a); }); var p3 = callhttp(url3, data3).then(function(result3) { return someAsync(result3); }); Promise.all([p1, p2, p3]).then(function(results) { // multiple results available in results array // that can be processed further here with // other promises });