2016-07-29 15 views
-1

genannt habe ich beschlossen, mit einer Mischung aus Rückrufen und Versprechungen zu experimentieren. In meinem Kontext verwende ich keine tatsächlichen Versprechen, sondern die Versprechensnotation von "dann". Ich versuche, eine Funktion aufzurufen, die einen Rückruf hat, der ein Objekt zurückgibt. Dieses Objekt gibt ein Objekt mit einer Funktion zurück, die die Funktion in der an den ersten Aufruf angehängten Methode then() aufruft. Unten ist mein Code:Callback-Objekts und Eigenschaft des Objekts Rückkehr nicht wie erwartet

function step1(arg,callback) { 
 
\t //do stuff 
 
    var obj = {key:"value"}; 
 
    callback(obj); 
 
} 
 

 
function step2(obj) { 
 
\t //do something to obj 
 
    obj.key2 = "hey"; 
 
    return { 
 
    \t andthen: function(callback) { 
 
    \t callback(obj); 
 
    } 
 
\t }; 
 
} 
 

 
function step3(obj) { 
 
    //modify obj more 
 
    console.log(obj); 
 
} 
 

 
step1('arg1',step2).andthen(function(obj) { step3(obj); });

Dieser Code führt eine nicht abgefangene Typeerror: kann nicht lesen Eigenschaft 'andthen' undefinierter. Since step1('arg1',step2) gibt ein Objekt zurück, warum kann JavaScript nicht die "andthen" -Eigenschaft des Objekts aufrufen? Ich weiß, Javascript ist asynchrones aber mein Verständnis ist, dass .andthen(function(obj) { step3(obj); }) würde warten, bis step1 beendet ist.

+0

'step1' Rückkehr nichts überhaupt * (außer' undefined') *, so dass Sie auf diesem Teil falsch sind, und es kann nicht verkettet werden. – adeneo

+0

Auch vielleicht dieses erfundenes Beispiel, aber dieser Code nichts tut asynchron, so etwas ist der Sinn? Rufen Sie einfach die drei Methoden der Reihe nach auf. – bhamlin

+1

Eigentlich 'schritt1 ('arg1', function (o) {Schritt 2 (o) .andthen (step3)});' – adeneo

Antwort

2

Sie haben vergessen, die return Anweisung in der step1 Funktion vor dem callback(obj) Aussage:

function step1(arg,callback) { 
    //do stuff 
    var obj = {key:"value"}; 
    return callback(obj); 
} 

Als allgemeine Bemerkung, in JavaScript, letzte Anweisung der Funktion ist nicht automatisch Rückgabewert es, return Schlüsselwort sein muss ausdrücklich erwähnt.