ES6新增特性Promise

Promise是什么

Promise 是异步编程的一种解决方案,其实是一个构造函数,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法。

在这里插入图片描述

Promise的特点

  1. Promise对象的状态不受外界影响,Promise对象代表一个异步操作,有三种状态:pending(进行中),fulfilled(已成功),rejected(已失败).只有异步操作的结果可以决定当前是哪一种状态,任何其他操作都无法改变这个状态
  2. 一旦状态改变,就不会再变,任何时候都是这样.Promise对象的状态改变只有两种可能:从pending变为fulfilled和从pending变为rejected,只要处于 fulfilled 和 rejected ,状态就不会再变了即 resolved(已定型)。

Promise的缺点

  1. 无法取消 Promise ,一旦新建它就会立即执行,无法中途取消。
  2. 如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。
  3. 当处于 pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

Promise的基本用法

有两个参数resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。

	   const p = new Promise(function(resolve,reject){
	       /*if(异步操作成功){
		  		resolve(value);
		   }else{
		  		reject(error);	
		   }
		   */
	   }); 
	   //通过then方法添加的回调函数,接收两个函数作为参数,第一个参数是 Promise 执行成功时的回调,
	   //第二个参数是 Promise 执行失败时的回调,两个函数只会有一个被调用。
	   p.then(function(value){  
	       console.log(value); 
	   },function(err){
		   console.log(err); 
	   });
	  

then方法

	 let p = new Promise((resolve, reject) => {
         setTimeout(function(){
                 var num = Math.ceil(Math.random()*10); 
                 if(num<=5){
                     resolve(num);
                 }else{
                     reject('数字不满足条件');
                 }
         }, 1000);
     });
     p.then((data) => {
             console.log('resolved',data);
         },(err) => {
             console.log('rejected',err);
         }
     );

then方法可以链式操作

	p.then((data) => {
	    console.log(data);
	})
	.then((data) => {
	    console.log(data);
	})
	.then((data) => {
	    console.log(data);
	});

catch方法
用来指定reject的回调

	p.then((data) => {
	    console.log('resolved',data);
	}).catch((err) => {
	    console.log('rejected',err);
	});

还有另外一个作用:在执行resolve的回调(也就是then中的第一个参数)时,如果抛出代码出错了,那么并不会报错卡死js,而是会进到这个catch方法中。

Promise的好处

解决了回调地狱,使异步编程更加简单,代码更加简洁、清晰明了,Promise的扁平化设计,加强了代码的可维护性,对代码的可阅读性有了很大的提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值