如何拒绝来自内部的承诺

时间:2014-01-21 14:16:03

标签: javascript promise

这可能是一个愚蠢的问题,但是中间的承诺链,你如何拒绝来自其中一个函数的承诺呢?例如:

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
    });

不再引用原始的解析/拒绝功能或PromiseResolver。我应该添加return Promise.reject(validationError);吗?

1 个答案:

答案 0 :(得分:83)

  

我应该添加return Promise.reject(validationError);吗?

是。但是,it's that complicated仅限于jQuery,并且具有Promise/A+兼容的库,您也可以简单地

throw validationError;

所以你的代码看起来像

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