Два способа сделать это являются
1. Если ответы не зависят друг от друга
var req1 = $.getJSON(...).then(function(response1) {
//evaluate the response and either reject or resolve a Deferred based on the results of your evaluation
if(!response1) { return $.Deferred().reject(); }
return $.Deferred().resolve(response1);
});
var req2 = $.getJSON(...).then(function(response2) {
//evaluate the response
if(!response1) { return $.Deferred().reject(); }
return $.Deferred().resolve(response2);
});
var req3 = $.getJSON(...).then(function(response3) {
//evaluate the response
if(!response1) { return $.Deferred().reject(); }
return $.Deferred().resolve(response3);
});
var req4 = $.getJSON(...).then(function(response4) {
//evaluate the response
if(!response1) { return $.Deferred().reject(); }
return $.Deferred().resolve(response4);
});
$.when(req1,req2,req3,req4)
.then(
function(response1,response2,response3,response4) { /* called when all requests are successfully complete */ },
function() { /* called when any of the requests have failed */ }
);
2. Если ответы DO зависят друг от друга
$.getJSON(...) //req1
.then(function(response1) {
//evaluate response1
if(!response1) { return $.Deferred().reject(); }
return $.Deferred().resolve(response1);
})
.then(function(response1) {
return $.getJSON(...).then(function(response2) {
//evaluate the response
if(!response2) { return $.Deferred().reject(); }
return $.Deferred().resolve(response1,response2);
});
})
.then(function(response1,response2) {
return $.getJSON(...).then(function(response3) {
//evaluate the response
if(!response2) { return $.Deferred().reject(); }
return $.Deferred().resolve(response1,response2,response3);
});
})
.then(function(response1,response2,response3) {
return $.getJSON(...).then(function(response4) {
//evaluate the response
if(!response4) { return $.Deferred().reject(); }
return $.Deferred().resolve(response1,response2,response3,response4);
});
})
.then(
function(response1,response2,response3,response4) {
//only called on success of all requests
},
function() {
//called on failure of any individual request, or if the responses of any individual request did not meet your conditions
}
)
EDIT
Если вы выполняете их в функции, то вам просто необходимо вернуть обещание и приковать его к .then
, как например:
function makeReqs() {
//method 1
return $.when(req1,req2,req3,req4);
//method 2
return $.getJSON(...)
.then(...)
.then(...)
.then(...)
}
//call the function
makeReqs
.then(
function() { /* this is called on success */ },
function() { /* this is called on failure */ }
)
.pipe был устаревшим JQuery 1.8 – peinearydevelopment
@peinearydevelopment - спасибо , Я работал со старыми версиями в последнее время. Должен использовать '$. Then', я отредактирую. – Adam
Спасибо, но как я могу инициировать успех или функцию отказа? – MahmoudKsemtini