title:ES6:Understandingpromisesubtitle:记录学习到的知识点,借鉴一下阮一峰的es6书Callbackhell感受一下:lettarget={data:"callBackhell!!!",timeout:1000}letasyncFunc=function(cb,data=this.data){setTimeout((dataTemp)=>{console.log(dataTemp);cb();},this.timeout,data);}.bind(target);asyncFunc(()=>{asyncFunc(()=>{asyncFunc(()=>{asyncFunc(()=>{asyncFunc(()=>{asyncFunc(()=>{console.log("吓人不.....");})})})})})})回调太多,看不懂。..让target={data:"promise~~",timeout:1000}letasyncFunc=function(data=this.data){varpObj=newPromise((resolve,reject)=>{setTimeout((dataTemp)=>{console.log(data);resolve(data)},this.timeout,data);})returnpObj;}.bind(target)asyncFunc().then(()=>asyncFunc()).然后(()=>asyncFunc()).then(()=>asyncFunc()).then(()=>asyncFunc()).then(()=>asyncFunc()).then(()=>asyncFunc("是不是更舒服?"))promise是一种异步方案,比传统的回调更加合理和强大。简单地说,它是一个容器,其中包含将来发生的事件(通常是异步操作)的结果。从句法上讲,它是一个对象,通过它可以获得异步操作的信息。Promise可以用同样的方式处理各种异步操作,因为它为异步操作提供了统一的API来展示同步操作过程中的三种状态:Pending和ongoingFulfilledsuccessfulrejectedfailed两个特点:1.promise对象的状态是不受外界影响:只有异步操作的结果才会决定对象的当前状态,其他操作无法改变它,这就是为什么叫'promise',意思是'承诺'中国人。FulfilledandPending->Rejected,resolved-finalized:只要状态发生变化,就会冻结,保留结果。这时候就叫解决了。它不同于事件。触发的时候,错过了再监听,是不会得到result的,但是会执行promise里面的异步函数,加个回调就可以得到result。示例代码:letpObj=newPromise((resolve,reject)=>{console.log("测试执行后,是否可以添加回调");letbSuccess=true;bSuccess?resolve("yes"):reject("no");})pObj.then(res=>{console.log(res)})注意promise对象一旦创建,就会立即执行。以上面代码为例,不能中途取消。如果不设置reject,里面会炸掉,无法传递给外部代码-mark-这个后面会介绍resolve,reject,.then(),.catch()`newPromise((resolve,reject)=>{letbSuccessed=true;if(bSuccessed){resolve("Fulfilled");resolve("Fulfilled");}else{//失败reject("Rejected");}}).then(res).catch(res)`Promise构造函数接受的参数是一个函数。该函数中的两个参数:resolve和reject是js引擎提供的,不需要自己设置。看起来确实有点奇怪。两个参数都接受Promise对象传递输出值作为参数resolve:改变状态从Pending->Fulfilledreject:改变状态从Pending->Rejected
