关于ES6的新特性Promise,作用:解决异步回调的嵌套问题

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。

Promise对象的状态改变,只有两种可能:从pending(行将发生的)变为fulfilled(实现)和从pending变为rejected(被拒的)。

只要这两种情况发生一种,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。

重要的事情说三遍!!!

有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。

ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。

Promise 新建后就会立即执行。

Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。

resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。

then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象函数传出的值作为参数。
关于ES6的新特性Promise,作用:解决异步回调的嵌套问题_第1张图片关于ES6的新特性Promise,作用:解决异步回调的嵌套问题_第2张图片


说什么废话直接上代码:

		var p1 = new Promise(function(resolve,reject){
			setTimeout(function(){
				console.log("开始")
				resolve(5);	  //异步操作的结果为fulfilled时的,成功回调函数。
			},500)
		})		
		
		p1.then(function(a){
				//console.log(a);	//输出结果5.
			var p2 =  new Promise(function(resolve,reject){
				setTimeout(function(){
					console.log("进行中");
					resolve();
				},800)
			})
			return p2;
			
		}).then(function(){
			var p3 =  new Promise(function(resolve,reject){
				setTimeout(function(){
					console.log("结束")
					
				},200)
			})
		})

6到飞起!promise实现红路灯案例:

		

	
		

最重要是promise能解决ajax异步请求的回调地狱,一层又一层的ajax请求的小伙伴再也不用发愁了!

		

关于Promise这里推荐一篇比较好懂的文章,相信你看了之后一定会更有收获的。加油,走你!

https://www.cnblogs.com/lvdabao/p/es6-promise-1.html

你可能感兴趣的:(js知识)