一、首先,Promise 是一个构造函数,对回调函数的一种封装,对异步编程的一种改进,用同步的方式表达出来。可以说Promise是ajax的执行状态管理工具,它还应用到Vue里的fetch等方面。该构造函数身上有两个方法:Promise.all(),和Promise.race()。
其实,我们应用的重点是:new出来的promise对象。它有三种状态:pending(进行中),resolved(已完成),rejected(已失败),状态一旦发生,就不能改变。执行new的时候状态就开始变化。promise对象身上有两个方法:then(),和catch()。
语法: var oP =new Promise(function(resolve,reject){
reject(data); || resolve(data);
}) ;
oP.then(function(data){ }, function(data){ }) //第一参数是在oP状态为resolved时执行。第二参数是在oP状态为rejected时执行(也叫错误捕获)。
oP.catch( function(data){ })。 //捕获错误,出错时不捕获错误会报错。
oP.then(function(data){ }).then(function(data){ }) //then()还可以传递,但是数据data不会传递(即第二个data为undefined)。
oP.then(function(data){ }, function(data){ }).catch( function(data){ }) //catch不会传递执行错误,只会执行一次(即这里的catch不会执行)。
所以,我们在遇到回调函数层层嵌套时,就可以将函数返回一个promise对象。利用 then方法+catch方法 来处理。
二、使用promise的好处是:
1.代码结构更加扁平且更可读,清晰明了。
2.能解决回调地狱问题。
3.可将数据请求和业务逻辑分离开来。
4.便于管理维护。
5.能更好的捕获错误。