我的项目涉及使用返回延迟承诺的多个 API 的工作流。我正在使用 jQuery 1.8
.done()
我知道和之间的区别在于.then()
返回.then()
一个新的承诺。在我的示例中,我希望如果第一个 deferred 被拒绝,则只有第一个.fail()
处理程序将被执行,因为第二个处理程序链接到新的 Promise。在执行中,两个失败处理程序都被执行。
var firstDeferred = $.Deferred(), secondDeferred = $.Deferred();
firstDeferred.promise()
.fail(function (error) {
console.log(error);
})
.then(function () {
return secondDeferred.promise();
})
.fail(function (error) {
console.log(error);
});
firstDeferred.reject('first deferred object');
//secondDeferred.reject('second deferred object');
我的预期结果:
> first deferred object
实际结果:
> first deferred object
> first deferred object
为什么两个.fail()
处理程序都被调用?如何构建我的工作流程,使处理程序仅在特定的延迟承诺被拒绝时才被调用?