这可能是一个愚蠢的问题,但是中间的承诺链,你如何拒绝来自其中一个函数的承诺呢?例如:
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);
吗?
答案 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
});