Ich hatte eine Worker
Klasse erstreckt, die einen Rückruf akzeptiert, aber ich wollte den Rückruf entfernen, indem sie ein Promise
machen, so kann ich nur new Worker(stuff, otherStuff).then(function() { ... });
Fehler bei der JavaScript-Versprechen
Um dies zu tun, habe ich das extends
Stichwort .
Zuerst bekam ich die ReferenceError: this is not defined
Fehler bei der this.a = a;
Zuordnung, aber ich fand heraus, dass das war, weil ich super();
Jetzt anrufen musste, gibt es TypeError: this.resolve is not a function
an der this.resolve({output: 'ok'});
Linie, also habe ich versucht mit Gewalt hinzufügen this.resolve
und this.reject
Funktionen, aber der Fehler wird nicht weggehen.
Dies ist der (stark vereinfacht) Code:
class Worker extends Promise {
constructor(a, b) {
super((resolve, reject) => {
console.log('inside super');
this.resolve = resolve;
this.reject = reject;
});
console.log('start constructing');
this.a = a;
this.b = b;
console.log('A: ' + JSON.stringify(a));
console.log('B: ' + JSON.stringify(b));
this.doStuff();
if (!this.status) {
this.resolve({output: 'ok'});
} else {
this.reject('There was an error');
}
}
doStuff() {}
}
let a = {x: 1};
let b = {z: 2};
console.log('before creation');
let w = new Worker(a, b);
console.log('after creation');
w.then(function() {
console.log('done');
});
ich verwende Knoten 6.1.0, die appearsPromise
Subklassifizieren zu unterstützen ... was mache ich falsch?
Eigentlich ist es 'this.resolve = resolve;' das sollte werfen - weil 'this' noch nicht initialisiert ist, bevor der' super' Aufruf – Bergi
zurückgibt Kannst du uns deinen tatsächlichen Code zeigen? Ich verstehe nicht, warum Sie "Promise" hier unterordnen oder welcher Teil asynchron ist. – Bergi
Der eigentliche Code verwendet eine Bibliothek (kue), die eine asynchrone Warteschlange implementiert und eine Reihe von "Tests" verarbeitet. Wenn die Verarbeitung beendet ist, ruft sie this.resolve auf, wenn es irgendwo einen Fehler gibt, ruft sie this.reject auf – wil93