Promise解决回调地狱
Promise解决回调地狱问题
什么是Promise?
- Promise 是ES6 引入的异步编程的新解决方案。语法上 Promise 是一个构造函数, 用来封装异步操作并可以获取其成功或失败的结果。
什么是回调地狱?
- 所谓回调地狱就是在回调函数里面不断的嵌套回调函数,这样就会导致代码不断缩进,可读性就会变得非常的差。
- 比如我要执行1秒打印一个人的姓名:
这里我们可以使用Promise来解决回调地狱的问题
- 因为Promise存在一种链式调用
- 我们可以调用Promise中的then方法构成链式调用,代码如下:
const p = new Promise((reslove , reject) =>{
setTimeout(function(){
var s = '老一';
reslove(s);
} , 1000)
})
p.then(function(value){
console.log(value);
return new Promise((reslove , reject) =>{
setTimeout(function(){
var s = '老二';
reslove(s);
} , 1000)
})
}).then(function(value){
console.log(value);
return new Promise((reslove , reject) =>{
setTimeout(function(){
var s = '老三';
reslove(s);
} , 1000)
});
}).then(function(value){
console.log(value);
return new Promise((reslove , reject) =>{
setTimeout(function(){
var s = '老四';
reslove(s);
} , 1000)
});
}).then(function(value){
console.log(value);
return new Promise((reslove , reject) =>{
setTimeout(function(){
var s = '老五';
reslove(s);
} , 1000)
});
}).then(function(value){
console.log(value);
return new Promise((reslove , reject) =>{
setTimeout(function(){
var s = '老六';
reslove(s);
} , 1000)
});
}).then(function(value){
console.log(value);
})
运行结果如下:
输出结果是一致的,但是解决了回调地狱的问题
原理刨析:(链式调用的原理)
- 调用 then 方法 then方法的返回结果是 Promise 对象, 对象状态由回调函数的执行结果决定
- 1).非 promise 类型的属性, 状态为成功或者失败, 返回值就是return后面跟着的值
- 2).是 promise 类型的属性, 状态为成功或者失败, 返回值就是return后面跟着的新的promise对象的reslove()或者reject()
- 在我看来,之所以Promise能够解决回调地狱的问题主要归功于 then 方法,then方法里面有一个return属性,而这个return属性当返回的是一个Promise对象时,那么如果后面还有嵌套的.then的话,返回的Promise对象就直接对接后面的.then方法,相当于上层Promise对象返回的新Promise对象就继续对接后面的.then方法,以此类推来解决回调地狱。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议。转载请注明来自 肥林の仓库