Promise(解决异步编程:书写格式(样式)的方案,它仅仅是将代码的书写从异步变为同步!)
(1)new Promise的好处是,当写上new Promise代码时,里面的函数(通常都是异步操作的函数)会被立即执行。
(2)构造函数Promise接收一个函数作为参数,该函数有2个函数参数,一个是resolve,一个是reject。
(3)这两个函数分别代表将当前Promise置为fulfilled(解决)和rejected(拒绝)两个状态。Promise正是通过这两个状态来控制异步操作的结果。
(4).then方法也是有2个函数作为参数,第一个参数永远是成功时执行的函数,第2个永远是失败时执行的函数。而.catch的
(5).then方法与.catch方法均会返回一个Promise对象.
(6).then方法可以无限的调用(链式自动调用)
(7)then里面的逻辑代码如果出现了错误,并不会在控制台抛出,而是会直接有.catch捕获。
(8)每个Promise的实例对象,都有一个then的方法,这个方法就是用来处理之前各种异步逻辑的结果。
(9).catch为then的语法糖,它是then(null, rejection)的别名。
也就是说,catch也是then,它用于捕获错误,它的参数也就是是then的第二个参数(即catch就是.then的reject函数)
。所以,假设catch中如果return 值的话,新的Promise对象也会是接受状态.
如果1个函数没有返回值(没有return 语句),则返回值为undefined!
整理如下:
Promise构造函数接收1个函数作为参数,该函数有2个函数形参,然后.then()方法接收2个函数作为形参,第1个永远是成功要执行的函数,第2个永远是失败要执行的函数。(.then也可以只写一个函数参数(成功函数),第2个参数省略(失败函数))
new Promise(function(resolve,reject){
异步操作代码.......
if(data){
resolve(); //执行resolve函数(类似:成功)
}else{
reject();//执行reject函数(类似:失败)
}
}).then(function(){
成功要执行的代码......
},function(){
失败要执行的代码......
}).then(function(){
成功要执行的代码.....
}).then(function(){
成功要执行......
}).catch(function(){
失败要执行的代码...
}).then(function(){
成功要执行的代码....
},function(){
失败要执行的代码....
}).then..........可以无限往下调用.then或.catch方法
总之使用法则(.then和.catch方法使用法则)是:
(1)只要当前函数(.then或.catch)没有throw Error,则下一步永远执行resolve函数(即.then的第一个参数函数)!!
可参照:https://segmentfault.com/a/1190000015561508
https://segmentfault.com/q/1010000012805108
https://www.imooc.com/article/23838(慕课)