Ich schreibe ein Modul, das die Google-API verwendet, aber alles umschließt, was Callback-basiert in einem Versprechen ist. Dies ist der Code des ProblembereichsPromise-Abweisung funktioniert nicht innerhalb des Rückrufs
file1.js
var File2 = require('file2')
var api = new File2()
api.auth().then(auth => {
api.search('example').then(res => {
...do some stuff...
})
}).catch(err => {
console.log('1') //Not being run
throw err
})
file2.js
class File2(){
auth() {
...works fine and resolves...
}
search() {
return new Promise((resolve, reject) => {
googleapi.somemethod(options, (err, res) => {
if(err) {
console.log('2') // DOES run
reject(new Error(err))
}
resolve(res.field) //Program crashes here because reject didn't actually reject
})
})
}
Der Aufruf von auth
funktioniert ganz gut, aber der Anruf an search
(und insbesondere googleapi.somemethod
) ist fehlgeschlagen, und err
ist definiert. Ich überprüfe nach Fehler, und console.log('2')
läuft, aber dann console.log('1')
in catch
nicht ausgeführt wird, wird der Fehler nicht ausgelöst, und das Programm stürzte auf resolve(res)
, weil res
nicht definiert ist. Ich habe versucht, zu then
den Fehler Fang als zweites Argument setzt stattdessen catch
zu verwenden, aber das noch nicht
api.search('example').then(res => {
...do some stuff...
}, err => {
console.log('2') // Still doesn't run
throw err
})
Ich renne Knoten V6.2.1
Sollten Sie nicht 'return' das Versprechen verkürzen ? Sollte es auch kein "else" geben? Es sieht so aus, als würde "resolve" immer aufgerufen, egal ... – elclanrs
Bekomme ich das Versprechen nicht zurück? Ich habe noch nie jemanden gesehen, der etwas wie > return resolve() oder > return reject() Und für die sonst, könnten Sie Recht haben. Ich befolge das übliche Muster der Behandlung von Callbacks, die etwas zurückgeben, aber yeah das funktioniert vielleicht nicht für Versprechungen. Ich hatte es immer in meinem Kopf, obwohl diese "Entschlossenheit" und "Zurückweisung" sich wie eine Rückkehr verhält, aber das könnte nur ein Loch in meinem Wissen um Versprechen sein. – Weston
Überprüfen Sie meine Antwort, hoffe, dass das hilft. Vergiss auch nicht den "else" -Teil. – elclanrs