2016-07-13 22 views
0

Ich bin etwas verwirrt durch den Unterschied zwischen asynchron/synchron. Ein kleiner Hintergrund, ich versuche ein Programm zu schreiben, das Rückrufe und Versprechen verwendet. Ich habe versucht, verschachtelte Anfragen zu erstellen, aber der Wert des Objekts führt diese Anfragen nicht durch, daher erstelle ich eine Funktion, die ein JS-Objekt eingibt, es modifiziert und das js-Objekt zurückgibt. Die Änderung würde einen API-Aufruf enthalten, der nach einem anderen Feld sucht, das dem JS-Objekt hinzugefügt werden soll.Zurückgeben einer Objektantwort von einer Funktion - Javascript

Kann ich erreichen dies durch so etwas wie folgt aus:

TEST1 function(....){ 
     // do stuff 
     request.get(options, function(error, response, body) { 
        // do stuff to get js object 
        jsobject = objectModification(jsobject); //modified js object 
     }); 
    } 

    objectModification function(jsobject) { 
     request.get(options, function(error, response, body) { 
        // do stuff to modify js object 
     }); 
     return jsobject; 
    }  
+0

Ich denke, Ihre Funktion aufrufen sollte sein ... 'jsobject = objectModification (Antwort);' ... Wenn Sie Promises verwenden, könnte dies viel einfacher sein ... –

+0

Würde das überhaupt funktionieren? Es wird immer "unidentifiziert" zurückgegeben, wenn ich die oben beschriebene Funktionsmethode verwende. – pokemongirl1234

+0

Ich kann nicht sehen, was die Anfrage ist, die du tust ... also wenn du 'undefiniert' erhältst, weil du das von 'request.get 'hast 'Anruf ... Was ist' Anfrage' ?, welche URL schlägst du ?. Der Code enthält keine Schlüsselelemente, um eine präzisere Lösung zu bieten. –

Antwort

0

Sie eine Rückruffunktion objectModification passieren könnte, so der Anrufer informiert wird, wenn die endgültige Version von jsobject bereit ist, und was es ist:

function TEST1(....){ 
    var options = { ... }; 
    request.get(options, function(error, response, body) { 
     // do stuff to get js object, for example: 
     jsobject = response; 
     // modify jsobject asynchronously: 
     objectModification(jsobject, function (jsobject) { 
      // here we have the final version of jsobject. 
     }); 
    }); 
} 

function objectModification(jsobject, done) { 
    var options = { ... }; 
    request.get(options, function(error, response, body) { 
     // do stuff to modify js object, for example: 
     jsobject.newProperty = response; 
     // Then call callback function to pass the modified js object   
     done(jsobject); 
    }); 
}