promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件监听——更合理和强大。
promise可以理解为一个容器,里面保存着某个未来才会结束的事件的结果。promise是一个对象,从他可以获取异步操作的消息。promise提供统一的api,各种异步操作都可以用同样的方法进行处理
示例:
1、Promise本身是一个状态机,每一个Promise实例只能有三个状态,pending
、fulfilled
、reject
,状态之间的转化只能是pending
-> fulfilled
、pending
-> reject
,状态变化不可逆。
2、Promise有一个then方法。该方法可以被调用多次,并且返回一个Promise对象
3、支持链式调用
4、内部保持有一个value值,用来保存上次执行的结果值,如果报错,则保存的是异常信息
由于Promise为状态机,我们需要先定义状态
var PENDING = 0;//进行中
var FULFILLED = 1;//成功
var REJECTED = 2;//失败
自己封装的Promise
// 1.原生实现一个promise
function MyPromise(){
this.status = 'pending';
this.msg = '';
var process = arguments[0];
var that = this;
process(function(){
that.status = 'resolve';
that.msg = arguments[0]
},function(){
that.status = 'reject';
that.msg = arguments[0]
})
}
MyPromise.prototype.then = function(){
if(this.status == 'resolve'){
arguments[0](this.msg)
}
if(this.status == 'reject'){
arguments[1](this.msg)
}
}
var myPm = new MyPromise(function(resolve,reject){
resolve('成功')
})
myPm.then(function(res){
console.log(res)
},function(){
console.log('err')
})
myPm.then((res1)=>{
console.log('res1')
},()=>{
console.log('err')
})