Promise学习(四)
1.Promise.any(一个可迭代的对象, 例如Array。)
Promise.any()接收一个Promise可迭代对象,只要其中的一个Promise成功,就返回那个已经成功的 Promise。如果可迭代对象中没有一个 Promise成功(即所有的 Promise都失败/拒绝),
就返回一个失败的 Promise和AggregateError类型的实例,它是 Error的一个子类,用于把单一的错误集合在一起。本质上,这个方法和Promise.all()是相反的。(处于草案,不适用)
2.Promise.prototype.catch(当Promise 被rejected时,被调用的一个function。 该函数拥有一个参数:)
catch()方法返回一个Promise,并且处理拒绝的情况。它的行为与调用Promise.prototype.then() 相同。 (事实上, calling obj.catch(onRejected)
内部calls obj.then(undefined, onRejected)
).
如果 onRejected
抛出一个错误或返回一个本身失败的 Promise , 通过 catch()
返回的Promise 被rejected;否则,它将显示为成功(resolved)。
返回值是一个Promise.
示例:代码如下
var p1 = new Promise(function(resolve, reject) { resolve('Success'); }); p1.then(function(value) { console.log(value); // "Success!" throw 'oh, no!'; }).catch(function(e) { console.log(e); // "oh, no!" }).then(function(){ console.log('after a catch the chain is restored'); }, function () { console.log('Not fired due to the catch'); });
图:
抛出一个错误,大多数时候将调用catch方法
在异步函数中抛出的错误不会被catch捕获到
在resolve()后面抛出的错误会被忽略
// 抛出一个错误,大多数时候将调用catch方法 var p1 = new Promise(function(resolve, reject) { throw 'Uh-oh!'; }); p1.catch(function(e) { console.log(e); // "Uh-oh!" }); // 在异步函数中抛出的错误不会被catch捕获到 var p2 = new Promise(function(resolve, reject) { setTimeout(function() { throw 'Uncaught Exception!'; }, 1000); }); p2.catch(function(e) { console.log(e); // 不会执行 }); // 在resolve()后面抛出的错误会被忽略 var p3 = new Promise(function(resolve, reject) { resolve(); throw 'Silenced Exception!'; }); p3.catch(function(e) { console.log(e); // 不会执行 });