在线文档教程

promise.catch

promise.catch

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

语法

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

参数

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

返回值

一个Promise.

内部演示:

// 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方法

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' }

捕获抛出的错误

// 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 }

如果已决议

//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 }

规范

SpecificationStatusComment
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Promise.prototype.catch' in that specification.StandardInitial definition in an ECMA standard.
ECMAScript Latest Draft (ECMA-262)The definition of 'Promise.prototype.catch' in that specification.Draft

浏览器兼容性

FeatureChromeFirefoxEdgeInternet ExplorerOperaSafari
Basic Support32.029.0(Yes)(No)197.1

FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic Support4.4.432.0(Yes)29(No)(Yes)8.0