2017-11-12 2 views
0

Ich arbeite derzeit an einem Projekt, bei dem 4 Anfragen gleichzeitig gesendet werden. Ich benutze gleichzeitig Überblendungseffekte, und die asynchrone Art führt zu zeitweiligen leeren Daten.Chained jQuery AJAX mit Versprechen

Ich habe in diese Methode suchen, wie in Prefer way of doing multiple dependent ajax synchronous call beschrieben zu ersetzen, wie ich zur Zeit

$.get('ajax_call_1').then(function(value) { 
    return $.get('ajax_call_2'); 
}).then(function(result) { 
    // success with both here 
}, function(err) { 
    // error with one of them here 
}); 

Aber meine Frage tue: Wie kann ich auf die Rückkehr von jeder Anforderung individuell mit der oben?

+0

Was ist der Zweck sie den Zugriff auf? Debuggen oder weiter im Code verwenden? Für das Debugging sollte ein einfacher 'console.log (result)' in jedem Callback den Zweck erfüllen. Wenn Sie es weiter verwenden möchten, gibt es keine Garantien, dass Sie bereits das Ergebnis haben, da der Code asynchron ist. Deshalb verwenden Sie die 'Promises' – 3Dos

+0

Verwenden Sie es weiter in den Code – oceansmoving

+0

Probieren Sie es aus und es funktioniert perfekt, danke! – oceansmoving

Antwort

1

Sie haben gesagt, dass die Anfragen gleichzeitig gesendet werden. So wie Sie Ihren Code geschrieben haben, werden sie nacheinander gesendet. Stattdessen mit Promise.all, können Sie für alle die Versprechungen Anfragen warten und Sie werden ein Array mit den Ergebnissen angegeben werden:

Promise.all([ 
    $.get('ajax_call_1'), 
    $.get('ajax_call_2'), 
    $.get('ajax_call_3'), 
    $.get('ajax_call_4') 
]).then(function(results) { 
    var first = results[0]; 
    var second = results[1]; 
    ... 
}).catch(function(err) { 
    // called if one of the requests fails 
}); 
+0

Es tut mir leid, mein Beitrag war ein wenig unklar. Wie es gerade eingerichtet ist, läuft es asynchron. Der obige Code ist, was ich gesucht habe, um es zu ersetzen – oceansmoving

+0

Okay, jetzt hast du mich verwirrt. Machst du es gerade so, wie du es in deiner Frage geschrieben hast oder wie ich es in meiner Antwort vorgeschlagen habe? –

+0

Versucht es und es funktioniert perfekt, danke! – oceansmoving