1.Promise概述Promise是一种异步编程的解决方案,它解决了传统异步编程中的回调地狱问题。同时,我们可以把promise理解为一个容器,里面存放着一些将来会结束的事件(通常是一些异步操作)。在es6语法中,Promise是一个用于生成Promise实例的构造函数。语法上说,Promise有三种状态,Pending(进行中),Resolved(完成),Rejected(失败)。Promise的状态只有两种可能,1.Pending->Resolved2.Pending->Rejected。以上两种情况是互斥的,也就是说只要Pending状态变为Resolved状态,这个状态就会冻结。不再从Pending状态变为Rejected状态2.Promise构造函数解析Promise构造函数接受一个函数作为参数。这个函数有两个参数,resolve和reject。这两个参数是两个函数,由Javascript引擎提供,不需要自己部署。下面举个例子,varp=newPromise(function(resolve,reject){//开始异步操作setTimeout(function(){console.log('异步操作完成');/*if(true){resolve('异步操作调用我成功');}else{reject('异步操作调用我失败');}*/},2000);});3.Promise方法分析通过上图我们可以看出Promise本身有all,race,reject,resolve等方法,原型上还有then,catch等方法。1)、then()方法的使用要使用then()方法,首先要创建一个Promise实例,也就是说,我们需要一个新的Promise对象。在我们实际开发中,我们将这个过程封装成一个函数,在函数中返回一个Promise实例。下面的例子,functionrunAsync(){varp=newPromise(function(resolve,reject){//异步操作开始setTimeout(function(){console.log('异步操作完成');resolve('异步操作成功calledI');/*if(true){resolve('异步操作成功调用我');}else{reject('异步操作失败调用我');}*/},2000);});返回p;}runAsync()Promise实例生成后,可以使用then方法分别指定Resolved状态和Reject状态的回调函数。如下,runAsync().then(function(data){console.log(data);})
