ES6中Promisecatch与Javacatch对比讲解
程序员文章站
2022-05-23 18:12:06
对比学习法是一种不错的总结、提高技巧。有过Java开发经验的人,在学习ES6 Promise catch用法时,总会不由自主地产生交叉联想。本文通过对比,加强读者对后者的理解。...
对比学习法是一种不错的总结、提高技巧。有过Java开发经验的人,在学习ES6 Promise catch用法时,总会不由自主地产生交叉联想。本文通过对比,加强读者对后者的理解。
1、
Java catch:是一种语法定义,用于捕获各种异常和错误。
Promise catch:是Promise的原型方法之一,返回一个新的Promise对象,用于处理上游传下来的失败和错误。
2、
Java catch:就像筛砂子、石块,某个粒径的砂子总能,且只能被某个孔径的筛子阻挡。
Promise catch:就像雁过拔毛。上游产生的失败和错误,经过某级catch后,就变成了“成功”。另外,catch可以“捣乱”,自己产生一个失败和错误,向下游传递。
var p1 = new Promise(function(resolve, reject) { reject('某种失败'); }); p1.catch(function(e) { console.log(e); // 捕获上游产生的失败和错误 }).then(function(){ console.log('经过上面的catch捕获,浪子回头变成功'); }, function () { console.log('不会被触发'); }); // 控制台可见: // 某种失败 // 经过上面的catch捕获,浪子回头变成功
3、在异步函数中抛出的错误不会被catch捕获到
var p2 = new Promise(function(resolve, reject) { setTimeout(function() { throw '异步函数中抛出的错误'; }, 1000); }); p2.catch(function(e) { console.log('不会执行' + e); // 不会执行 });
4、在resolve()后面抛出的错误会被忽略
var p3 = new Promise(function(resolve, reject) { resolve(); throw 'Silenced Exception!'; }); p3.catch(function(e) { console.log('不会执行' + e); // 不会执行 });