2015-04-02 20 views
0

我有一套getJson()函数,我连续使用jQuery的推迟调用。jQuery推迟:条件未验证时停止进度

function f1(){ $.getJSON(..)} 
function f2(){ $.getJSON(..)} 
.... 
function fn(){ $.getJSON(..)} 

var dfd = $.Deferred(); 
dfd.done(f1,f2...fn) 

dfd.resolve(); 

的事情是,该功能的一个可能会遇到一个给定的问题,并返回,在这种情况下,我想停步的进取,而不是调用其余功能。

我怎样才能做到这一点?

回答

0

的两种方法可以做到这一点是

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 
    } 
) 

编辑

如果你在一个函数执行这些,那么你只需要返回的承诺,并将其链接到受.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 */ } 
    ) 
+0

.pipe已被弃用的jQuery 1.8 – peinearydevelopment 2015-04-02 18:05:27

+0

@peinearydevelopment的 - 感谢,我最近一直在使用旧版本。应该使用'$ .then'我会编辑。 – Adam 2015-04-02 18:06:35

+0

谢谢,但我如何触发成功或失败的功能? – MahmoudKsemtini 2015-04-02 18:06:48