webentwicklung-frage-antwort-db.com.de

Wie man ein Versprechen von innen ablehnt, funktioniert dann

Dies ist wahrscheinlich eine dumme Frage, aber in der Mitte der Versprechenskette, wie lehnt man ein Versprechen aus einer der damaligen Funktionen ab? Beispielsweise:

someActionThatReturnsAPromise()
    .then(function(resource) {
        return modifyResource(resource)
    })
    .then(function(modifiedResource) {
        if (!isValid(modifiedResource)) {
            var validationError = getValidationError(modifiedResource);
            // fail promise with validationError
        }
    })
    .catch(function() {
        // oh noes
    });

Es gibt keinen Verweis mehr auf die ursprüngliche Auflösungs-/Zurückweisungsfunktion oder den PromiseResolver. Soll ich nur return Promise.reject(validationError); hinzufügen?

77
chinabuffet

Soll ich nur return Promise.reject(validationError); hinzufügen?

Ja. Allerdings es ist so kompliziert nur in jQuery, mit einer Promise/A + - kompatiblen Bibliothek könnten Sie auch einfach

throw validationError;

Ihr Code würde dann so aussehen

someActionThatReturnsAPromise()
    .then(modifyResource)
    .then(function(modifiedResource) {
        if (!isValid(modifiedResource))
            throw getValidationError(modifiedResource);
        // else !
        return modifiedResource;
    })
    .catch(function() {
        // oh noes
    });
88
Bergi