首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

promise.catch

catch()?方法返回一个Promise,只处理拒绝的情况。它的行为与调用Promise.prototype.then(undefined, onRejected)相同。

语法

代码语言:javascript
复制
p.catch(onRejected);

p.catch(function(reason) {
   // rejection
});

参数

onRejected当Promise 被拒绝时,被调用的一个Function。?该函数拥有一个参数:reason拒绝的原因。

?如果?onRejected?抛出一个错误或返回一个失败的 Promise ,Promise ?通过?catch()?返回失败结果;否则,它将显示为成功。

返回值

一个Promise.

内部演示:

代码语言:javascript
复制
// overriding original Promise.prototype.then/catch just to add some logs
(function(Promise){
?? ?var originalThen = Promise.prototype.then;
?? ?var originalCatch = Promise.prototype.catch;
?? ?
?? ?Promise.prototype.then = function(){
?? ??? ?console.log('> > > > > > called .then on %o with arguments: %o', this, arguments);
?? ??? ?return originalThen.apply(this, arguments);
?? ?};
?? ?Promise.prototype.catch = function(){
?? ??? ?console.log('> > > > > > called .catch on %o with arguments: %o', this, arguments);
?? ??? ?return originalCatch.apply(this, arguments);
?? ?};

})(this.Promise);



// calling catch on an already resolved promise
Promise.resolve().catch(function XXX(){});

// logs:
// > > > > > > called .catch on Promise{} with arguments: Arguments{1} [0: function XXX()]
// > > > > > > called .then on Promise{} with arguments: Arguments{2} [0: undefined, 1: function XXX()]

描述

catch?方法可以用于您的promise组合中的错误处理。

示例

使用链式语句的?catch方法

代码语言:javascript
复制
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');
});

// The following behaves the same as above
p1.then(function(value) {
? console.log(value); // "Success!"
  return Promise.reject('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');
});

捕获抛出的错误

代码语言:javascript
复制
// Throwing an error will call the catch method most of the time
var p1 = new Promise(function(resolve, reject) {
? throw 'Uh-oh!';
});

p1.catch(function(e) {
? console.log(e); // "Uh-oh!"
});

// Errors thrown inside asynchronous functions will act like uncaught errors
var p2 = new Promise(function(resolve, reject) {
? setTimeout(function() {
?   throw 'Uncaught Exception!';
? }, 1000);
});

p2.catch(function(e) {
? console.log(e); // This is never called
});

// Errors thrown after resolve is called will be silenced
var p3 = new Promise(function(resolve, reject) {
  resolve();
? throw 'Silenced Exception!';
});

p3.catch(function(e) {
 ? console.log(e); // This is never called
});

如果已决议

代码语言:javascript
复制
//Create a promise which would not call onReject
var p1 = Promise.resolve("calling next");

var p2 = p1.catch(function (reason) {
?? ?//This is never called
?? ?console.log("catch p1!");
?? ?console.log(reason);
});

p2.then(function (value) {
?? ?console.log("next promise's onFulfilled"); /* next promise's onFulfilled */
?? ?console.log(value); /* calling next */
}, function (reason) {
?? ?console.log("next promise's onRejected");
?? ?console.log(reason);
});

规范

Specification

Status

Comment

ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Promise.prototype.catch' in that specification.

Standard

Initial definition in an ECMA standard.

ECMAScript Latest Draft (ECMA-262)The definition of 'Promise.prototype.catch' in that specification.

Draft

?

浏览器兼容性

Feature

Chrome

Firefox

Edge

Internet Explorer

Opera

Safari

Basic Support

32.0

29.0

(Yes)

(No)

19

7.1

Feature

Android

Chrome for Android

Edge mobile

Firefox for Android

IE mobile

Opera Android

iOS Safari

Basic Support

4.4.4

32.0

(Yes)

29

(No)

(Yes)

8.0

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com