Bin langsam am Verzweifeln... Ich verstehe folgenden Code nicht: Accessory.prototype.getValue = function(callback) { if (this.hasStateToDisplay) { this.query("displayRawState",callback); } else { callback("Accessory does not support values"); } }; Das funktioniert zwar, aber wenn ich nun den Wert von this.query noch runden möchte, dann bringe ich den Wert nicht mehr zurück zu "callback". var value = this.query("displayRawState"); var value.toFixed(1,callback); Was mache ich falsch? Danke für jede Hilfe.
var value.toFixed(1,callback); ist natürlich var value = value.toFixed(1,callback); geht aber trotzdem nicht...
Luke schrieb: > this.query("displayRawState",callback); this.query ist eine Funktion, die (hier) zwei Parameter entgegen nimmt. Meine Glaskugel sagt, dass die das macht, was du im ersten Parameter übergibst ("displayRawState"), und damit den Callback aufruft (ebenfalls eine Funktion). Kann sein, dass die Funktion this.query gar keinen Rückgabewert hat. Luke schrieb: > var value = this.query("displayRawState"); OK, du rufst hier eine Funktion mit einem Parameter weniger auf als oben. Kann stimmen, kann auch Blödsinn sein. Und du weist den Rückgabewert der Variable "var" zu. Aber weißt du überhaupt, was die Funktion zurückgibt? Nichts, "Hubert" oder "Trololo"? Luke schrieb: > var value = value.toFixed(1,callback); Jetzt hast du deine "value", wo eventuell sogar das drinnensteht, was du dir erhoffst, nämlich anscheinend ein Float. Ob das wirklich so ist, würde ich wie oben geschrieben erst einmal überprüfen. Aber nehmen wir an, es ist so. Jetzt rundest du das mit ".toFixed", und weist das wieder der Variable "value" zu. Soweit so gut. Aber ".toFixed" nimmt nur einen Parameter entgegen, du übergibst zwei. Dein "callback" wird also gleich einmal ignoriert. Mit (mittlerweile schon sehr viel) Glück ruft "this.query("displayRawState",callback);" einfach nur den Callback mit dem Ergebnis auf. Dann könntest du das mit: callback(value); nachbilden. Besser ist es aber, wenn du das Runden in deiner Callbackfunktion machst.
:
Bearbeitet durch User
Danke für die Erklärungen. Das hier ist einfach das einzige was funktioniert (kann sein, das der Code nicht optimal ist): this.query("displayRawState",callback); Ich will aber noch vorher runden...
Luke schrieb: > Das hier ist einfach das einzige was funktioniert Genau genommen funktioniert auch das nicht. Zumindest nicht mit dem Code, den du gepostet hast. Bitte poste lauffähigen Code, dann kann man dir auch helfen ohne wild herumraten zu müssen. Luke schrieb: > Ich will aber noch vorher runden... Da sehe ich zwei Möglichkeiten: 1) Die "this.query" angreifen und schon dort runden. 2) So wie du es schon versucht hast, was aber nur unter den von mir oben genannten Bedingungen funktionieren wird.
Vielleicht hilft ja das hier: https://raw.githubusercontent.com/webdeck/homebridge-indigo/master/index.js Ich möchte lediglich eine andere Stelle aus dem JSON auslesen und diese runden. 24.00000 wird nämlich nicht akzeptiert, sondern nur 24.0.
Müßte eigentlich in etwa so gehen:
1 | this.query("displayRawState",function(error, value) { |
2 | if (error) { |
3 | callback(error); |
4 | } else { |
5 | callback(undefined, value.toFixed(1)); |
6 | } |
7 | }); |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.