由于项目很早就启用了es6,所以开发中经常会用到promise,优雅好用
以前我们经常这么写异步回调:
step1(function(val1) {
step2(function(val2) {
step3(function(val3){
// ...嵌套再嵌套
})
})
})
这种三角形代码缺钱显而易见:
- 代码不优雅,阅读费劲
- 难以维护,俗称回调地狱
然后我们应用es6中promise:
new Promise(step1())
.then(step2())
.then(step3())
// 。。。是不是很帅?
promise以同步的方式来写异步,不用担心错过某个事件或信号,它是等上一个异步操作有结果了再执行它所寄存的下一个操作
几个需要注意的点:
- promise有三种状态 等待(pending)、已完成(fulfilled)、已拒绝(rejected)
- promise的状态只能从“等待”转到“完成”或者“拒绝”,不能逆向转换,同时“完成”和“拒绝”也不能相互转换
- promise必须有一个then方法,并且要返回一个promise对象,供then的链式调用
- then接受两个回调(成功与拒绝),在相应的状态转变时触发,回调可返回promise,等待此promise被resolved后,继续触发then链
基本用法
ES6的promise对象是一