Ich bin neu in der Welt der Callback-Hölle, und habe ein wenig festgefahren. Ich mache ein paar Analysen, also rufe ich jedes Mal, wenn eine Funktion aufgerufen wird, eine Funktion an, die eine Anfrage ausführt, um die Anfrage auf unserem Server zu protokollieren. In jeder dieser ursprünglichen Funktionen wird jedoch ein request.get erzeugt, um einige Informationen zurückzugeben. Also rufe ich im Wesentlichen eine Funktion auf, die eine Anfrage in eine andere Funktion stellt, die danach eine Anfrage stellen muss. Der Code selbst viel komplizierter ist (und kompliziert, ich meine lange und ärgerlich), als ich gerade beschrieben, also hier ist die abgespeckte Version:Nodejs Request gefolgt von Request - Synchronisationsproblem
function myFunction(x, y, callback) {
// variable declarations
postFunction(a, b);
// other logic for the function
request.get(url, function(error, response, body) {
// request code here
callback(somedata, otherFunctionThatDoesntMatterHere(blah));
});
}
function postFunction(a, b) {
// other logic for the function
var dataToSend = "XML HERE";
request.post({
url: url,
body: dataToSend,
headers: {'Content-Type' : 'text/xml'},
function(error, response, body) {
if (error) {
console.log(error);
}
else if (response.statusCode !== 200) {
console.log('Invalid Status Code Returned:', response.statusCode);
}
else if (!error && response.statusCode == 200) {
console.log('POST RESPONSE: ', body);
}
}
);
}
Was gerade passiert ist, dass die Post-Funktion doesn‘ t Rückkehr vor dem Ende der Hauptfunktion. Ich weiß, dass dies Teil der asynchronen Knoten-Knoten ist, aber ich möchte, dass diese synchron ausgeführt werden. Ich bin mir ziemlich sicher, dass ich das lösen kann, indem ich einen Callback zur Post-Funktion hinzufüge, aber ich bin mir nicht sicher, wie. Ich habe viele verschiedene Ansätze ausprobiert, aber leider verstehe ich nicht ganz, wie das alles funktioniert. Vielen Dank im Voraus für Ihre Hilfe!
Ich war buchstäblich über meine Lösung zu schreiben, die auf diese fast identisch ist. Ich wünschte, ich hätte das zuerst gesehen, haha. Danke :) – redcastle
Haha, kein Problem! – AdmanStrong