एक वादे श्रृंखला के भीतर, क्या यह एक सिंक्रोनस फ़ंक्शन को कॉल करने का बुरा अभ्यास होगा?
नहीं, यह बिल्कुल बुरा अभ्यास नहीं है। यह कई उम्मीदवारों और उपयोगी प्रथाओं में से एक है।
आप वादे श्रृंखला (.then()
हैंडलरों के भीतर) या असीमित कार्यों के बाद सिंक्रोनस फ़ंक्शंस को कॉल करने के लिए पूरी तरह से स्वतंत्र हैं जो फिर एक नया वादा वापस कर देते हैं।
जब आप .then()
हैंडलर से कुछ वापस लौटते हैं, तो आप या तो एक मूल्य (जो माता-पिता के वादे का हल मूल्य बन जाता है) वापस कर सकते हैं या आप एक और वादा वापस कर सकते हैं (जो पिछले वादे पर चेन) या आप जो काम कर सकते हैं एक अस्वीकार वादा लौटने की तरह (वादा श्रृंखला अस्वीकार कर दिया जाता है)।
तो, इसका मतलब है कि आप एक सिंक्रोनस फ़ंक्शन को कॉल कर सकते हैं और इससे मूल्य प्राप्त कर सकते हैं या एसिंक फ़ंक्शन को कॉल कर सकते हैं और एक और वादा प्राप्त कर सकते हैं और फिर .then()
हैंडलर से वापस लौटा सकते हैं।
इन सभी समकालिक चीजें पूरी तरह से कानूनी हैं और प्रत्येक का अपना उद्देश्य है। यहाँ .then()
हैंडलर में कुछ तुल्यकालिक घटनाओं हैं:
function delay(t, val) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(val);
}, t);
});
}
function increment5(val) {
return val + 5;
}
delay(500, 10).then(increment5).then(function(val) {
return val - 3;
}).then(function(final) {
document.write(final);
});
:
// modify resolved value
someAsync().then(function(val) {
return val + 12;
});
// modify resolved value by calling some synchronous function to process it
someAsync().then(function(val) {
return someSynchronousFunction(val);
});
// synchronously check the value and throw to change the promise chain
// to rejected
someAsync().then(function(val) {
if (val < 0) {
throw new Error("value can't be less than zero");
}
return val;
});
// synchronously check the value and return a rejected promise
// to change the promise chain to rejected
someAsync().then(function(val) {
if (val < 0) {
return Promise.reject("value can't be less than zero");
}
return val;
});
यहाँ एक async आपरेशन कि एक वादा तीन तुल्यकालिक .then()
संचालकों द्वारा पीछा देता है और फिर अंतिम मूल्य outputting का एक छोटा उदाहरण है
नोट: आप केवल आम तौर पर केवल चाहते हैं वादे का उपयोग करने के लिए जब आपके पास एसिंक्रोनस ऑपरेशंस हो या हो सकता है क्योंकि यदि सब कुछ तुल्यकालिक है, तो शुद्ध सिंक्रोनस कोड निष्पादित करने और लिखने में आसान दोनों तेज़ है। लेकिन, यदि आपके पास पहले से कम से कम एक एसिंक ऑपरेशन है, तो आप निश्चित रूप से उस एसिंक ऑपरेशन के साथ सिंक्रोनस ऑपरेशंस को मिश्रित कर सकते हैं और कोड की संरचना में सहायता के लिए वादे का उपयोग कर सकते हैं।
संभावित डुप्लिकेट फेंक [जब एक बनाने के लिए वादा का उपयोग कर एसिंक्रोनस फ़ंक्शन] (http://stackoverflow.com/q/28993673/1048572) – Bergi
सिंक्रोनस फ़ंक्शंस के लिए कभी भी वादे का उपयोग न करें। – Bergi