NEWS
[Gelöst] request() - Netatmo
-
Guten Morgen Zusammen,
Bin am Verzweifeln und verstehe gerade so einiges nicht mehr....
Bei folgendem vereinfachtem Skript wird der request () in Zeile 18 mal eben locker übersprungen und bei Zeile 29 weiter gemacht. Beim zweiten Durchlauf wird der request dann ausgeführt. Aber warum ist das so? Dachte bis heute, dass die Zeilen sequenziell abgearbeitet werden.var access_token; function readToken() { var headers = { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }; var dataString = 'grant_type=password&client_id=5de0cc77a11ec5960911ffd0&client_secret=MeXp9wwdY7uAKee3MCUzFUJSLphuTIYju&username=xx.yy@zz.de&password=vergessen'; var options = { url: 'https://api.netatmo.net/oauth2/token', method: 'POST', headers: headers, body: dataString }; request(options, function (error, response, body) { if (!error && response.statusCode == 200 ) { var obj = JSON.parse(body, function (key, value){ if (key == "access_token") { access_token = value; return value; } }); }; }); var request_daten = require('request'); var dataString_2; var lat_ne = "50.805642"; var lon_ne = "6.977646"; var lat_sw = "-50.803309"; var lon_sw = "-6.982365"; dataString_2 = 'access_token=' + access_token + '&lat_ne=' + lat_ne + '&lon_ne=' + lon_ne + '&lat_sw=' + lat_sw + '&lon_sw=' + lon_sw; } setTimeout(readToken, 1500);
Eine Idee warum das so ist oder was nicht richtig ist?
Vielen Dank und Gruß
Rüdiger -
@RKBroker said in request() - Netatmo:
Guten Morgen Zusammen,
Bin am Verzweifeln und verstehe gerade so einiges nicht mehr....
Bei folgendem vereinfachtem Skript wird der request () in Zeile 18 mal eben locker übersprungen und bei Zeile 29 weiter gemacht. Beim zweiten Durchlauf wird der request dann ausgeführt. Aber warum ist das so? Dachte bis heute, dass die Zeilen sequenziell abgearbeitet werden.var access_token; function readToken() { var headers = { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }; var dataString = 'grant_type=password&client_id=5de0cc77a11ec5960911ffd0&client_secret=MeXp9wwdY7uAKee3MCUzFUJSLphuTIYju&username=xx.yy@zz.de&password=vergessen'; var options = { url: 'https://api.netatmo.net/oauth2/token', method: 'POST', headers: headers, body: dataString }; request(options, function (error, response, body) { if (!error && response.statusCode == 200 ) { var obj = JSON.parse(body, function (key, value){ if (key == "access_token") { access_token = value; return value; } }); }; }); var request_daten = require('request'); var dataString_2; var lat_ne = "50.805642"; var lon_ne = "6.977646"; var lat_sw = "-50.803309"; var lon_sw = "-6.982365"; dataString_2 = 'access_token=' + access_token + '&lat_ne=' + lat_ne + '&lon_ne=' + lon_ne + '&lat_sw=' + lat_sw + '&lon_sw=' + lon_sw; } setTimeout(readToken, 1500);
Eine Idee warum das so ist oder was nicht richtig ist?
Vielen Dank und Gruß
Rüdigeralso eigentlich definiert man den die variable (require) davor, bevor man sie benutzt. vor allem, wir dein request_daten überhaupt irgendwo verwendet?
var request = require('request'); request(options, function (error, response, body) { // blabla });
-
@homecineplexx Vielen Dank. Den Teil mit request_daten habe ich nur entfernt, um das Skript hier kurz zu halten. Die Variable hatte ich mal definiert, aber laut Forum ist das für genau diesen Fall nicht mehr notwendig. Aber auch dann wird der request übersprungen.
Gruß
Rüdiger
-
@RKBroker said in request() - Netatmo:
@homecineplexx Vielen Dank. Den Teil mit request_daten habe ich nur entfernt, um das Skript hier kurz zu halten. Die Variable hatte ich mal definiert, aber laut Forum ist das für genau diesen Fall nicht mehr notwendig. Aber auch dann wird der request übersprungen.
Gruß
Rüdiger
ist request nicht ein asynchroner Job/Befehl ?
-
@homecineplexx Absolut keine Ahnung, ob das asynchroner Befehl ist oder nicht.
Durch eine Menge von console.log konnte ich nur sehen, dass beim ersten Durchlauf der erste request nicht abegarbeitet bzw. aufgerufen wird. Der zweite request wird beim ersten Durlauch abegarbeitet, rennt dann aber gegen die Wand, weil das Ergbnis (sprich, den Token) vom ersten request benötigt wird... -
@RKBroker das war eigentlich eher als feststellung gemeint. darum hat der request ja auch eine callback function
-
@homecineplexx NoP
Mal "bildlich" dargestellt:console.log("Request-1 Token"); request(options, function (error, response, body) { console.log("Request-2 Token"); if (!error && response.statusCode == 200 ) { console.log("Request-3 Token"); var obj = JSON.parse(body, function (key, value){ console.log("Request-4 Token"); if (key == "access_token") { console.log("Request-5 Token"); access_token = value; return value; } console.log("Request-6 Token"); }); console.log("Request-7 Token"); }; console.log("Read-Token-8: " + access_token); }); console.log("Request-9 Token"); var request_daten = require('request'); var dataString_2;
Ergibt im log:
11:04:34.242 info javascript.0 Start javascript script.js.common.OpenWeatherUV.NetAtMo_02 11:04:34.243 info javascript.0 script.js.common.OpenWeatherUV.NetAtMo_02: Request-1 Token 11:04:34.243 info javascript.0 script.js.common.OpenWeatherUV.NetAtMo_02: Request-9 Token 11:04:34.243 info javascript.0 script.js.common.OpenWeatherUV.NetAtMo_02: Data: undefined
Demnach wird der request nicht beachtet...
-
Ok, Problem gelöst, dafür ein paar Andere