标签:span func final 就会 错误处理 解决方法 finally The 而不是
1、传递参数,错误的原因
function f(val){ return new Promise((resolve,reject) => { if(val){ resolve({ name:‘小明‘ },100); //成功时也可以传递一个值,但需要注意的是只能传递一个参数,传两个的话第二个参数是拿不到的 }else{ reject(‘404‘); //错误处理的第一种方式:传递参数,错误的原因 } }); } //then(resolve,reject),碰到resolve或是reject都是异步的,所以tr catch对它是没有用的 //then方法中的第二个回调reject,是失败时候做的事 f(false) .then( (data, data2) => { console.log(data2); //undefined }, e => { console.log(e); //404 })
2、使用catch捕获错误
function f(val){ return new Promise((resolve,reject) => { if(val){ resolve({ name:‘小明‘ }); }else{ reject(‘404‘); } }); } f(true) .then(data => { //?参数的格式到底要不要打括号 console.log(data); //{name:‘小明‘} return f(false); //返回的promise是失败的话,后面的then对这个失败没有处理的话,就会继续往下走 }) .then(() => { console.log(‘我永远不会被输出‘) }) .then(() => { }, e => console.log(‘失败‘)) //?这里的e是形参而不是事件对象对吗 .catch(e => { //上面处理了错误的话,这个catch就不会运行了 console.log(e); //404 }) .then( () => { //catch后面可以继续then,但是如果后面的then出错了,跟上一个catch就没有关系了 console.log(e) return f(false) }) .catch() //如果最后一个catch有错误,会无限catch //标准es中,这个问题没有很好地解决方法,但是第三方的库有对全局的捕获
3、finally捕获
//finally //不论成功还是失败,finally中的内容一定会执行 //可以在finally中做一些收尾的工作 function f(val){ return new Promise((resolve,reject) => { if(val){ resolve({ name:‘小明‘ }); }else{ reject(‘404‘); } }); } f(true) .then(data => { console.log(data); //{name:‘小明‘} return f(false); }) .catch(e => { console.log(e) //404 return f(false); //即便返回了一个成功的promise,下面的finally也会执行,如果返回的是失败的promise,控制台最后一行会报错uncaught (in promise) 404 }) .finally( () => { console.log(100) //100 })
标签:span func final 就会 错误处理 解决方法 finally The 而不是
原文地址:https://www.cnblogs.com/rickdiculous/p/13296753.html