/ / दो वादों को श्रृंखलाबद्ध करने का सही तरीका जब दूसरा वादा पहले पर निर्भर करता है? - जावास्क्रिप्ट, jquery, es6-वादा

दूसरा वादा दो वादे को सही करने का सही तरीका है जब दूसरा वादा पहले पर निर्भर करता है? - जावास्क्रिप्ट, jquery, es6-वादा

मैं कयामत के पिरामिड से बचने के दौरान जेएस प्रॉमिस का उपयोग करके श्रृंखला दो JQuery के async कॉल कैसे कर सकता हूं? मुझे पता है कि मैं एक "JQuery" वादे को इस तरह वास्तविक वादा कर सकता हूं:

Promise.resolve($.getJSON(url, params));

अगर मैं सिर्फ एक वादा करना चाहता हूं, तो मैं यह कर सकता हूं:

Promise.resolve($.getJSON(url1, params1))
.then(function(result){
// do stuff
});

अगर मैं दो अलग-अलग अजाक्स कॉल के लिए इंतजार करना चाहता हूं, तो मैं यह कर सकता हूं:

Promise.all(
[
Promise.resolve($.getJSON(url1, params1)),
Promise.resolve($.getJSON(url2, params2))
]).then(function(results_array){
// do stuff
});

हालाँकि, अगर मैं एक के बाद एक कॉल करना चाहता हूँ, तो यह काम नहीं करता है:

Promise.resolve($.getJSON(url1, params1))
.then(function(result){
//do stuff
return Promise.resolve($.getJSON(url2, params2));
}).then(function(result){
//result is a promise, not the results from the second call to getJSON()...
//and it doesn"t even wait for the second call to finish.
//result.then() is just going to bring me further into the pyramid of doom :(
});

किसी तरह, मैं "do stuff" फ़ंक्शन में निर्मित वादे पर .then () कॉल करना चाहता हूं। यह करने के लिए मुहावरेदार तरीका क्या है?

उत्तर:

जवाब के लिए 3 № 1
return Promise.resolve($.getJSON(url2, params2));

आपने जो किया वह पहले से ही हल किया हुआ वादा था (के माध्यम से Promise.resolve) वादा जिसका हल मूल्य का परिणाम है $.get(), जो एक वादा भी है। यही कारण है कि "यह नहीं करता है" यहां तक ​​कि दूसरी कॉल खत्म होने का इंतजार करें "और" परिणाम एक वादा है "।

इसके अलावा, आप jQuery AJAX कॉल को रैप करने की आवश्यकता नहीं है क्योंकि वे वादे वापस करते हैं। jQuery के वादे लगभग मूल वादों के समान ही कार्य करते हैं (लेकिन पूरी तरह से नहीं)।

इसके बजाए ऐसा करें:

$.getJSON(url1, params1).then(function(result)){
return $.getJSON(url2, params2);
}).then(function(result)){
//result 2
});

इसके अतिरिक्त, आप "jQuery का उपयोग कर रहे हैं। वादों के साथ jQuery AJAX इस तरह किया जा सकता है:

$.getJSON(url1, params1).then(function(result){
// do stuff
});

कई वादों को सुनकर इस तरह किया जा सकता है jQuery:

$.when($.getJSON(...), $.getJSON(...)).then(function(res1, res2){
// do stuff
});