一、为什么会出现promise?
在实际开发过程中,经常会遇到某些耗时的js操作。其中,包含异步操作也包含同步操作,但是他们都不是立马可以得到结果的。此时,一般会为其指定一个回调函数,即事先规定,一旦他们运行结束,应该会调用那些函数。
JS采用回调来处理异步编程,但是如果出现多层嵌套,也就是常说的"回调地狱"。"回调地狱"不但维护困难,也更容易滋生bug。因此promise出现。
Promise将原来回调地狱中的的回调函数,从横向变为纵向。
//回调地狱
asyncOperation(function (data) {
// 处理data
anotherAsync(function (data2) {
// 处理data2
yetAnotherAsync(function () {
//完成
});
});
});
//Promise
PromiseSomething()
.then(function (data) {
// 处理data
return anotherAsync();
})
.then(function (data2) {
// 处理data2
return yetAnotherAsync();
})
.then(function () {
//完成
})
二、Promise规范
- 一个promise可能有三种状态:等待(pending)、已完成(fulfilled)、已拒绝(rejected)。
- 一个promise状态只可能从"等待"转到"完成"态或者"拒绝"态,不能逆向转换,同时"完成"和"拒绝"状态不能相互转换。
- promise必须实现then方法(可以说,then是promise的核心),而且then必须返回一个promise,同一个promise的then可以调用多次,并且回调的执行顺序跟他们被定义时的顺序一致。
- then方法接收两个参数