2016-08-19 5 views
-1

Ich habe derzeit den folgenden (vereinfacht hier) Code, um zwei Ajax-Aufrufe, die ich vor der Verarbeitung von mehr Code mit einem when (ich weiß, dass dies verkettet sein könnte, aber das When-Konstrukt ist abzuschließen erweiterbar).

function f1(ID) { 
    return $.ajax({ 
     url: "'/ajax/getF1/')?>" + '/' + ID, 
     dataType: "json"  
    }); 
} 

function f2(ID) { 
    return $.ajax({ 
     url: "'/ajax/getF2/')?>" + '/' + ID, 
     dataType: "json"  
    }); 
} 

$.when(
    f1(ID), 
    f2(ID) 
).done(function(a1,a2) { 
    ....do something... 
}); 

Dies scheint unelegant, so meine Frage ist, wie kann ich die beiden genannten Funktion f1 und f2 in anonyme Funktionen inline genannt. Einfaches Ersetzen (sagen wir) von f1 durch den Inhalt der Funktion f1 funktioniert nicht.

Es scheint mir, dass dies einfach sein sollte, aber es entzieht sich mir.

+0

'Funktion (ID) {/ * f1 Code * /}, Funktion (ID) {/ * f2 Code * /}' – Pointy

+0

Was ist '>' ohne ein tun? passender ' Barmar

+0

Allgemeine Regel (vorausgesetzt, dass Ihre Funktion keine Nebenwirkungen hat und nur eine Rückkehr ausführt): Wenn 'f()' 'A' zurückgibt und Sie 'g (f())' aufrufen, können Sie 'g (A)' aufrufen weil 'f() === A'. Grundsätzlich, wenn Sie eine Funktion aufrufen, die nur etwas zurückgibt, können Sie das immer an Stelle des Funktionsaufrufs setzen, nachdem Sie natürlich das Schlüsselwort "return" entfernt haben. –

Antwort

4

Sie übergeben Versprechen $.when() nicht funktioniert. Also, was Sie tun könnten, ist dies:

Es gibt keine Notwendigkeit für eine Zwischenfunktion.

+0

@Cruachan - Hat das Ihr Problem gelöst? – jfriend00

1

Just do:

$.when(
    $.ajax({ 
    url: "'/ajax/getF1/')?>" + '/' + ID, 
    dataType: "json"  
    }), 
    $.ajax({ 
    url: "'/ajax/getF2/')?>" + '/' + ID, 
    dataType: "json"  
    }) 
).done(function(a1,a2) { 
    ....do something... 
}) 
Verwandte Themen