NEWS
Variable in request-Aufruf
-
hi,
um Informationen von einer externen Seite abzurufen nutze ich den request. Die Aufrufe sind mehrmals verschachtelt, weil ich Informationen (z.B. ein Token) aus dem ersten Request in den zweiten einbauen muss.
Das funktioniert und die Problematik der asynchronen Aufrufe ist mir auch bekannt. Aber jetzt brauch ich aber eine weitere Variable (hier z) aus der vorherigen Abfrage, an der ich in der zweiten nicht drankomme.
url1 = "..."; request(url1, function (error, response, body) { z = 1; url2 = "..."; request(url2, function (error, response, body) { log(z); }); });
Wie kann ich das vernünftig lösen?
-
Wenn die variable z ausserhalb beider requests deklariert ist, kannst du von überall drauf zugreifen.
-
@blauholsten sagte in Variable in request-Aufruf:
Wenn die variable z ausserhalb beider requests deklariert ist, kannst du von überall drauf zugreifen.
Ja, allerdings wird z aus dem ersten request ermittelt und soll verarbeitet werden.
-
@a200 sagte in Variable in request-Aufruf:
allerdings wird z aus dem ersten request ermittelt und soll verarbeitet werden.
Wo ist das Problem ? Umgekehrt wäre es schwieriger. Bitte richtig deklarieren.
const url1 = "..."; var z; request(url1, function (error, response, body) { z = 1; var url2 = "..."; request(url2, function (error, response, body) { log(z); }); });
-
@paul53 sagte in Variable in request-Aufruf:
const url1 = "...";
var k; const url2 = "..."; const url2 = "..."; request(url1, function (error, response, body) { for(k=0; k<2; k++) { request(url2, function (error, response, body) { log("k = " + k); }); } });
k=2
Wie bekomme ich die in dem ersten Unter-Request k=0 und in dem zweiten Unter-Request k=0 -
request() in einer Schleife auszuführen, ist keine gute Idee. Wozu soll das dienen ?
-
im vorherigen aufrufen ermittle ich die anzahl und urls, die ich aufrufen soll. Um alle Dateien (k) abzurufen wollte ich k requests laufen haben, die jeweils einen anderen Datenpunkt füllen.
-
@a200 sagte in Variable in request-Aufruf:
Um alle Dateien (k) abzurufen wollte ich k requests laufen haben, die jeweils einen anderen Datenpunkt füllen.
Dann erstelle eine Funktion mit dem url2-request, die sich aus der Callback-Funktion solange selbst aufruft, bis die ermittelte Anzahl erreicht ist.
-
aus dem body des request(url1) erhalte ich a) die Anzahl der Dateien und b) die jeweiligen urls der Dateien. Kannst du mir bitte template dafür erstellen?
-
@a200 sagte in Variable in request-Aufruf:
und b) die jeweiligen urls der Dateien.
url2 ist also nicht konstant, sondern bei jedem neuen Aufruf anders ?
Dann versuche es etwa so:const url1 = "..."; var url2 = []; var k, anzahl; function getData() { request(url2[k], function (error, response, body) { // body verarbeiten k++; if(k < anzahl) getData(); }); } request(url1, function (error, response, body) { // anzahl ermitteln und Array url2 füllen k = 0; getData(); });
-
@paul53 sagte in Variable in request-Aufruf:
@a200 sagte in Variable in request-Aufruf:
und b) die jeweiligen urls der Dateien.
url2 ist also nicht konstant, sondern bei jedem neuen Aufruf anders ?
Dann versuche es etwa so:Super, Danke. Jetzt geht es.
Das Ergebnis kann hier: https://forum.iobroker.net/post/228883 gesehen werden.