Javascript

JS高级—0xxx—Promise

本文主要是介绍JS高级—0xxx—Promise,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

一、为什么需要promise

首先,前端的网络请求需要用这种方式

 

 

大家自己写或者调用别人的,需要重写或看源码等导致开发成本过大,ECMA做了统一,于是就有了promise;

 

出现了promise,只要给调用者返回promise即可,调用者根据promise的状态自己做处理即可;

跟调用者说:我先给你一个承诺即promise,你先去处理其他mainScript,一会就会请求成功后我会调用resolve(data),然后根据规范promise.then()也会被联动调用,这个时候你便可以再promise.then()里接收到数据;

 

做了统一,方便开发;

 

 

 

二、执行器

1.执行器executor

就是new Promise里的回调函数;

 

 2.resolve传不同值的区别

 

 

三、Promise对象(实例)方法

(一)then()方法     课程19集18’’

注意,调用resolve()后会执行then方法的第一个回调函数,这是规定,这些都是ecma的规定,不要问为什么,规定就是这样,v8引擎也就是这样实现的。

 

1.同一个pormise可以添加多个then方法,然后resolve()时,这多个then方法会同时被调用

2.then方法也会返回一个promise,所以可以链式调用

(1)如果返回一个普通的值(数字/字符串/普通对象/undefined):那么会被包裹到一个新的promise里继续返回,并且这个值作为这个新promise里resolve()方法的参数;

promise.then( (res)=>{ 
   return 'aaaa';
})

等价于:

promise.then( (res)=>{ 
   return new Promise((resolve,reject)=>{
     resolve('aaa');
   }
})

 

(2)如果返回一个promise,那么这个promise也会被包裹,并且返回的promise的状态,会决定then()方法返回promise的状态;

不明白的话,可以看看上一章中resolve传不同值的状态;

promise.then( (res)=>{ 
   return new Promise((resolve,reject)=>{
     resolve(1111);
   }
})

等价于:

promise.then( (res)=>{ 
   return new Promise((resolve,reject)=>{
     resolve( new Promise((resolve,reject)=>{
             resolve(1111);
     });
   }
})

 

(3)如果返回一个对象,并且这个对象实现了then方法接口

promise.then( (res)=>{ 
   return {
     then: ()=> resolve(11111)
   }
})

等价于:

promise.then( (res)=>{ 
   return new Promise((resolve,reject)=>{
     resolve( obj.then());
   }
})

 

3.then()方法可以传递两个参数,第一个参数时resolve()执行的,第二个参数时reject()执行的;

但是现在一般都是只写一个参数,第二个参数不写,rejected要执行的回调放在catch方法中;

(二)catch方法

 

 

(三)finally方法

 

 

 

四、Promise类方法

(一)resolve方法

 

 

 (二)reject方法

 

 (三)all方法

感觉很像数组的every方法,都要满足时才为true;

res是一个数组,数组里是所有的promise的返回值,数组元素的顺序就是all()方法里参数的顺序;

 

(四)allSettled方法 

 

(五)race方法

 

 (六)any方法

all方法类似every,那么any方法就类似some方法,只要有一个就为true;

 

这篇关于JS高级—0xxx—Promise的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!