ES6 | Promise

本文深入讲解Promise对象在异步编程中的应用,通过示例代码解释如何使用resolve和reject处理异步任务,以及then和catch方法的调用时机。

Promise 是一个对象,从它可以获取异步操作的消息,是一种操作异步编程的解决方案。

一般我们会在Promise里面写一些不一定马上完成的异步方法,比如ajax获取数据,而Promise能提供两个回调函数:resolve, reject,在获取到数据之后可以根据需要触发其中一个回调函数, 下面是自己写的一个demo便于理解

用setTimeout来模拟异步获取数据,如果获取到了数据,触发recolve,并将取得的数据作为参数,否则触发reject。Promise还有几个特点:

  1. 无法取消 Promise ,一旦新建(new)它就会立即执行,无法中途取消。
  2. 如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。
  3. 处于 pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
  4. 在 JavaScript 主线程的当前运行完成之前,回调函数(then和catch)永远不会被调用。
        const p = new Promise((resolve,reject)=>{
		// some code
		var data;
		setTimeout(function(){
			data = '从axios获取的数据'; 
			if(data){
				resolve(data);
			}
			else{
				reject('error error!')
			}
		},2000);
	})
	p.then(res=>{
		//  res就是data
		console.log(res ,'请求成功') //从axios获取的数据,请求成功
		return res;	
	}).then(res=>{
		res = res + ',再进行处理后的数据'
		console.log(res); //从axios获取的数据,再进行处理后的数据
	}).catch(err=>{
		// err就是'error error!'
		console.log(err);
	})
	for(i=0;i<10000;i++){

	}
	console.log('先执行同步代码')

 

总结:创造一个Promise对象,在里面执行一个异步任务,根据异步任务的结果,自定义回调函数resolve或reject, 并用then或catch调用。
 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值