Ich möchte eine Post-Anfrage an eine externe API, dann ein Objekt meiner eigenen benutzerdefinierten Klasse basierend auf der Antwort von der Post-Anfrage erstellen. Ich verwende das Anforderungsmodul, um die Postanforderung zu stellen. Ich dachte, ich würde einfach das Objekt von der Callback-Funktion zurückgeben, aber es sieht so aus, als ob die Funktion zurückgibt, bevor der Rückruf abgeschlossen ist, so dass immer ein Null-Objekt zurückgegeben wird. Wie kann ich die Funktion auf die Callback-Funktion warten lassen?Rückrufe für Request-Modul in Typescript
Funktion, die die Post-Anforderung macht:
read(id: string) {
request.post({
headers: {
"content-type": "application/json"
},
url: baseUrl + service,
json: {
"id": id
}
}, function(error: any, response: http.IncomingMessage, body: any) {
if (!error && response.statusCode === 200) {
var parsedJson = JSON.parse(JSON.stringify(body));
/* tslint:disable:no-string-literal */
if (parsedJson["status"] === "200") {
var data = parsedJson["data"];
return new Dummy.Dummy(id, data["dummy"]["value"], data["dummy2"]["value"], data["dummy3"]["value"]);
}
/* tslint:enable:no-string-literal */
}
});
}
Ich habe versucht, das neue Dummy-Objekt in der 'if'-Prüfung zu protokollieren, und es druckt korrekt das Dummy-Objekt, so dass es in das' if' geht. Ich habe auch versucht, "body" zu analysieren, ohne sie zuerst zu stringieren (aus den von Ihnen vorgeschlagenen Gründen), und es hat nicht funktioniert (ich weiß nicht warum), aber es funktionierte nach dem Streichen (weiß immer noch nicht warum). – fluffychaos
Ich habe die Dokumentation für 'request.get' überprüft. Setzen Sie den Parameter 'json' so, dass die forces-Funktion automatisch 'response' body als JSON parst, also brauchen Sie 'var parsedJson = JSON.parse (body);' code überhaupt können Sie 'body [" status "] == verwenden = "200" 'stattdessen. Überprüfen Sie meine Antwort bearbeiten für einige weitere Erklärungen. – SergeyK
Danke für das Beispiel. Ich bin immer noch verwirrt darüber, wie das Dummy-Objekt tatsächlich an die Funktion zurückgegeben wird, die die "read" -Funktion aufruft. Ich habe eine Callback-Funktion erstellt, die einfach das Dummy-Objekt als Parameter verwendet (wie oben angegeben) und dann das Dummy-Objekt zurückgibt. Ich habe dann die Funktion als Parameter an die Funktion übergeben, die die 'read'-Funktion aufruft. Aber die Funktion kehrt immer noch zurück, bevor der Rückruf beendet wird ... – fluffychaos