前言
上一篇章我们学习了Promise的概念、基本使用、状态等等,对于Promise也有了基础的了解,那本章就对与Promise的方法作基本学习,去了解了解Promise提供了什么方法。
一、then
then
处理Promise
返回结果,接收两个回调函数
- 第一个回调函数:Promise执行成功触发的回调函数,从这个函数中可以获取成功数据
- 第二个回调函数:Promise执行失败或出错触发的回调函数
在异步代码中我们需要传入回调函数来获取返回结果,而想通过这个结果再进行异步操作,就需要继续执行同样的操作,这样就产生了回调地狱
,如下展示
sum(10, 20, (result) => {
console.log("执行结果1", result);
sum(result, 30, () => {
console.log("执行结果2", result);
sum(result, 40, () => {
console.log("执行结果3", result);
sum(result, 50, () => {
console.log("执行结果4", result);
sum(result, 60, () => {
console.log("执行结果5", result);
console.log("执行结束");
});
});
});
});
});
这样的代码就会导致我们难以处理某个回调产生的问题、可读性差等问题,那Promise又是如何去解决的?
在调用then
方法之后会返回一个Promise对象,而基于这个Promise对象可以再调用then
方法,实现链式调用,也就解决回调地狱
问题,光讲概念有点难以理解,上代码
function sum(a, b) {
new Promise((resolve, reject) => {
setTimeout(() => {
resolve(a + b);
}, 2000);
});
}
sum(10, 20)
.then((result) => {
// 触发成功回调
console.log("执行结果1", result);
return result + 30;
},(err) => {
// 触发错误回调
console.log("出错啦!!");
}).then((result) => {
// 触发成功回调
console.log("执行结果2", result);
return result + 40;
},(err) => {
// 触发错误回调
console.log("出错啦!!");
});
在then
方法中,通过第一个函数可以获取到异步代码成功返回的方法,那在这个函数中我们就可以做一些其他到操作,然后继续返回结果,成为下一个then
方法成功回调的数据,也就是说我们在每个then
方法的两个回调单独做操作,成功回调继续求和返回结果,错误回调则处理错误。
二、catch
catch
是在Promise对象中执行reject函数
或执行出错
所触发的,为了捕获错误并返回错误结果,同样执行catch
方法也会返回一个Promise对象。
catch
接收一个回调函