Warum gibt catch ein Objekt und kein Fehlerobjekt zurück?
So funktioniert es mit $http von Angular, auf dem diese Bibliothek basiert. Mehr oder weniger ist es ein Artefakt und nicht unbedingt die richtige Vorgehensweise. Ich möchte zu einem konsistenteren Fehlerpfad wechseln, bei dem ein Error
verwendet wird, an das gegebenenfalls Antwortdetails angehängt sind.
function createError(message, details) {
var err = new Error(message);
Object.keys(details, function (key) {
err[key] = details[key];
});
return err;
}
createError('timeout of ' + config.timeout + 'ms exceeded', {
code: 'ECONNABORTED',
config: config
});
Ich möchte auch die Bibliothek so ändern, dass sie Promise
nur ablehnt, wenn ein tatsächlicher Fehler auftritt, unabhängig vom HTTP-Statuscode. Während jetzt alles außerhalb des 200-300-Bereichs abgelehnt wird.
@mzabriskie
Sie können auch die Verwendung eines config-Flags in Betracht ziehen, um zu bestimmen, welche Aktion ausgeführt werden soll, wenn eine nicht 2xx/3xx-Antwort zurückgegeben wird.
Die request-promise
Lib verwendet dafür das simple
Flag/die Option. Wenn simple
true
, wird die Anforderungszusage bei Nicht-Netzwerkfehlern (2xx, 3xx) abgelehnt. Wenn das Flag falsch ist, weist es nichts zurück und liegt in der Verantwortung des Benutzers. Ich fand dies sehr nützlich und habe Anwendungen, die beide Einstellungen verwenden. Ich denke, ich habe normalerweise einfach auf true
da dies im Allgemeinen eine bessere Standard-IMO ist.
https://github.com/request/request-promise#get -a-rejection-only-if-the-request-failed-for-technical-reasons
Schließt als Duplikat von #24
Hilfreichster Kommentar
So funktioniert es mit $http von Angular, auf dem diese Bibliothek basiert. Mehr oder weniger ist es ein Artefakt und nicht unbedingt die richtige Vorgehensweise. Ich möchte zu einem konsistenteren Fehlerpfad wechseln, bei dem ein
Error
verwendet wird, an das gegebenenfalls Antwortdetails angehängt sind.Ich möchte auch die Bibliothek so ändern, dass sie
Promise
nur ablehnt, wenn ein tatsächlicher Fehler auftritt, unabhängig vom HTTP-Statuscode. Während jetzt alles außerhalb des 200-300-Bereichs abgelehnt wird.