Javascript callback

Gast #4403590
Lesenswert?

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.
#4403649
Lesenswert?

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.
Gast #4403674
Lesenswert?

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...
#4403724
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren