Ich bin mit der Aktualisierung meines Codes fest, um Versprechungen jetzt zu verwenden.Rewrite Javascript-Funktion mit Promises
Die Hash-Funktion funktioniert, wurde aber geändert. Es gibt jetzt ein Versprechen und keinen Wert mehr zurück. Und ich weiß nicht, wie es zu benutzen :-(
function hash(input) {
// transform the input into an arraybuffer.
let buffer = new TextEncoder("utf-8").encode(JSON.stringify(input));
return window.crypto.subtle.digest("SHA-256", buffer).then((hash)=> {
return btoa(String.fromCharCode(...new Uint8Array(hash)));
});
}
Dies ist die Funktion, die neu geschrieben werden muss. Hash (...) mehrmals aufgerufen wird.
function update(){
// array of Objects (empty to simplify my question)
let data = [{}, {}, {}];
// if data has changed => process it
if(hash(data) !== hash(previousData)){
// clone for next time comparison (before calculating hashes!)
previousData = JSON.parse(JSON.stringify(data)); // simple deepclone
data.forEach(item=>{
// reset dynamic values within a cloned item for simple item comparison checks
item.id = hash(Object.assign({}, item, {dynValue:1}));
//complet item hash including dynamic values
item.hash = hash(item);
});
// fire event with changed data array
// ...
}
}
I‘ m Erstellen grundsätzlich zwei Hashes für jedes Objekt innerhalb des Arrays einen späteren Vergleich zu vereinfachen. eine mit einigen ignoriert Eigenschaften (auf die Standardwerte zurückgesetzt) und eine für das komplette Objekt.
Danke für Ihre aushelfen
Ich schlage vor, dass Sie kein Versprechen von der "Hash" -Funktion zurückgeben, da der Rest Ihres Codes auf der Prämisse basiert, dass Sie nicht sind. Warte einfach darauf, dass das Versprechen gelöst wird und gib das tatsächliche Ergebnis zurück. – apokryfos
@apokryfos Wie würden Sie die Hash-Funktion umschreiben, um den Wert zurückzugeben? window.crypto bot.digest gibt nur ein Versprechen zurück. –
Konnte möglicherweise eine alternative lib finden, die einen Wert zurückgibt. Vielleicht http://code.google.com/p/crypto-js? – apokryfos