Promise

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)  //出错了
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值