2017-09-04 7 views
0

Rückkehr Ich habe den Code folgendebraucht für Versprechen in warten, bevor

var a = ajax1(); 
var b = ajax2(); 

$.when(a,b).done(function(){ 
    var d = function123(); 
    $.when(d).done(function(){//doSomething}); 
}); 

function function123(){ 
    var c = ajax3(); 
    return c.promise(); 
} 


return $.when(a,b,c).promise()//???; 

Wie kann ich für alles warten vor der Rückkehr in die Funktion zu beenden?

bearbeitet: Ich habe den Code testen mit dem folgenden:

var e = $.when(a,b) 

.done(function(){ 
    var d = function123(); 
    d.done(function(){ 
     console.log('1'); 
    }); 
    return d.done(function(){//doSomething}); 
    }); 

    e.done(function(){ 
     console.log('2'); 
    }); 

meiner Rückkehr Ergebnis '2 1'. aber ich erwarte ein Ergebnis von '1 2'. kann ich wissen, warum ist das so?

+0

Ich sehe nicht, wie Sie bekommen '2 1' aus diesem Code. Bitte geben Sie eine [mcve] – Jamiec

Antwort

0

Wie warte ich auf alles zu beenden, bevor Sie die Funktion zurückgeben?

Sie nicht! Du gibst das Versprechen zurück und wenn es gelöst ist (oder abgelehnt wird), machst du weiter, was auch immer du tust.

var e = $.when(a,b).done(function(){ 
    var d = function123(); 
    return d.done(function(){//doSomething}); 
}); 

Notiere die Zugabe von return - dies wird Ihr Versprechen zurück. Indem Sie die Antwort von d.done auf eine andere Variable setzen (e in diesem Fall), haben Sie ein Versprechen, das gelöst wird, wenn alles darin gelöst ist.

e.done(function(){ 
    //everything is done 
}); 

Auch dieses Q/A in seiner Gesamtheit lesen: How do I return the response from an asynchronous call?

+0

@rotatingFan Es ist schwer, Code in einem Kommentar zu lesen. Wenn Sie ein Update auf Ihre Frage haben (mit neuem Code), klicken Sie bitte auf den Bearbeiten-Button unter Ihrer Frage und legen Sie sie ein. – Jamiec

+0

aktualisiert. erstmals mit stackoverflow. = x – rotatingFan

Verwandte Themen