ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JS高级—0xxx—Promise

2022-04-11 01:31:29  阅读:240  来源: 互联网

标签:resolve 0xxx reject JS Promise res 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;

 

标签:resolve,0xxx,reject,JS,Promise,res,promise,方法
来源: https://www.cnblogs.com/EricShen/p/16128378.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有