我知道一个thenable
有then
的方法,但是Promise
怎么知道当时被反对的状态已经移动到拒绝?
的例子:在这里,美元。ajax是一个可启用的,如果你这样做,它可以作为一个承诺被ducktyped:
Promise.resolve($.ajax({ url: '/test' }))
但是这个表达式返回的承诺如何处理catch
的情况呢?
一个Promises/A+ then
方法确实接受两个回调——一个用于实现,一个用于拒绝。您将不使用.then(…).catch(…)
模式,而是使用.then(…, …)
-第二个回调是"catch case"(注意.catch(…)
只是.then(null, …)
)。
这就是enable被吸收的方式——当第二个回调被调用时,它们拒绝带有错误的承诺。例子:
var rejectingPromise = Promise.resolve({
then: function(onSuccess, onError) {
onError(new Error);
}
});