作用:
解决异步回调地狱的问题,但注意,并不能减少代码量,还可能比原来的代码还多。
代码量问题不是 promise 该在意的,重点是回调地狱回调地狱回调地狱,重要的事情说三遍!
什么是回调地狱?
在写异步方法的时候,如果需求复杂,就需要进行方法的多层嵌套。
(异步方法是不能用 return 然后再去多次调用的!异步方法会被放到队列里,然后等主方法完成后才会执行队列的内容,因此 return 得到的是 undefined)
多层嵌套会出现以下这种情况:
f(data,fun(){
console.log(data)
f(data,fun(){
console.log(data)
f(data,fun(){
console.log(data)
...
})
})
})
会使得页面出现过多的缩进,以及很多的方法调用,看着是真的很不爽!
像上面这样,当有很多的方法嵌套时,就是回调地狱。
如何解决?
在 promise 中,可以用 resolve 和 reject 表示是否成功和失败,通过 .then() 方法实现。
如下:
function f(data){
//返回一个promise对象
return new Promise(function(resolve,reject){
...
if(err) return reject(err)
resolve(data)
})
}
f(data)
.then(){
console.log(data)
//返回一个promise对象
return f(data)
}
//这里的then调用的是上一个then里返回的promise对象
.then(){
console.log(data)
return f(data)
}
.then(){
console.log(data)
}
看上去代码多了很多,但是确实是解决了回调地狱。
虽然我感觉比较难理解,但也确实promise更受人青睐,还是学着好。