2016-11-29 11 views
12

Mam poniżej odroczoną logikę jquery.jQuery odroczone i zwracaj fałsz na podstawie odpowiedzi serwera

var $qCallA = callA(); 
var $qCallB = callB(); 

$.when($qCallA,$qCallB).then(function() { 
     $("#spinnerDiv").removeClass('spinner show'); 
}); 

function callA() { 
    return $.getJSON("/callA", function (data) { 
     if (data.status === "success") { 
      buildTable1(data); 
     } 
    }); 
} 

function callB() { 
    return $.getJSON("/callB", function (data) { 
     if (data.status === "success") { 
      buildTable2(data); 
     } 
    }); 
} 

Chcę zwrócić wartość false dla wywołania $ .getJSON na podstawie odpowiedzi z json zapleczu. Na przykład, jeśli data.status == "failure", wówczas chcę zwrócić "false" dla getJSON. Jak to osiągnąć?

Dzięki

+2

nie można niczego z funkcją asynchronicznej powrócić. Co dokładnie należy zrobić, gdy 'data.status == 'failure'' dzieje? –

+0

Nie można powrócić z asynchronicznego połączenia .... Czy chcesz nie spełnić obietnicy? – epascarello

+0

Tak. Chcę nie spełnić obietnicy. – JavaUser

Odpowiedz

4

Należy dostarczyć zwrotnych sukcesu then dla $.getJSON i powrót zwyczaj Deffered dla obsługi $.when.

W ten sposób można ręcznie rozwiązać lub odrzucić na podstawie danych znajdujących się w JSON.

var $qCallA = callA(); 
var $qCallB = callB(); 

$.when($qCallA,$qCallB).then(function (s1, s2) { 
    $("#spinnerDiv").removeClass('spinner show'); 
}).fail(function() { 
    //handle failure 
}); 

function callA() { 
    return $.getJSON("/callA").then(function (data) { 
     if (data.status === 'failure') { 
     return $.Deferred().reject("A: no success"); 
     } 
     return $.Deferred().resolve(data);  
    }); 
} 

function callB() { 
    return $.getJSON("/callB").then(function (data) { 
     if (data.status === 'success') { 
     return $.Deferred().resolve(data); 
     } 
     return $.Deferred().reject("B: no success"); 
    }); 
} 

Similar JSFiddle

8

Brzmi jak chcesz używać odpowiednich then zwrotnych, gdzie można zwracać nową wartość wynikową za obietnicę:

$.when(callA(), callB()).then(function(a, b) { 
    $("#spinnerDiv").removeClass('spinner show'); 
    if (a && b) … 
}); 

function callA() { 
    return $.getJSON("/callA").then(function(data) { 
     if (data.status === "success") { 
      buildTable1(data); 
     } 
     return data.status != "failure"; 
    }); 
} 

function callB() { 
    return $.getJSON("/callB").then(function(data) { 
     if (data.status === "success") { 
      buildTable2(data); 
     } 
     return data.status != "failure"; 
    }); 
} 
Powiązane problemy