Promise是一个对象
,可以获取异步操作,异步编程其一解决方案
promise有三种状态
pending(进行中),fulfilled(已成功),rejected(已失败)
1.操作只可以pending->fulifilled或者pending->rejected
2.状态无法取消Promise,如果不设置回调函数,无法抛出错误,当处于pending状态,无法得知进行到哪一步骤
创建Promise
可以使用new来调用Promise的构造器进行实例化
var promise = new Promise(function(resolve,reject){
//异步处理,处理后调用resolve解析,reject拒绝
})
//promise执行**异步操作**,一切正常调用resolve否则调用reject
var myPromise = new Promise(function(reslove,reject){
//setTimeout模拟异步
setTimeout(function(){
resolve('我成功了,代码要正常执行')
},250)
})
myPromise.then(function(successMessage){
successMessage执行的是上面调用resolve(...)传入的值
})
常用:promise.then(成功调用).catch(失败调用)
举例:
var p1 = new Promise(function(resolve , reject){
})
var p2 = new Promise(function(resolve,reject){
resolve(p1);
})
这段代码,会先执行p1等待p1fufilled/rejected,p2回调函数立即执行
关于.then(Promise.prototype.then)链式操作
getJSON().then(function(json){
return json.post
}).then(function(post){
//第一个then执行完成,会把结果当做参数传给我
如果第一个回调函数then,返回的Promise,那我还要等一会会
})
关于.catch(Promise.prototyps.catch)捕捉错误
Promise.prototyp。catch是Promise.prototype.then(null,rejection)的别名
getJson(' ').then(function(){
}).catch(function(){
//处理回调函数运行错误
})
Promise.all,Promise.race方法
用于将多个Promise实例包装成一个新的Promise实例
p1,p2,p3都返回fulfilled,p才会fulfilled,有一个rejected,p就会rejected,第一个reject的实例返回值,会传递给回调函数
var p = Promise.all([p1,p2,p3]);
var p = Promise.race([p1,p2,p3]);
Promise.resolve,Promise.reject
需要将现有的对象转为Promise对象,
var jsPromise=Promise.resolve($.ajax(' '));
如果resolve参数是一个Promise对象的实例,原封不动返回
var p = Promise.resolve('Hello');
p.then(fucntion(s){
console.log(s) //hello
})
var p= Promise.reject('出错了')
p.then(null,function(s){
console.log(s) //出错了
})