1. promise作用:

promise:解决异步回调的问题

2. 目的:

创建异步对象,当异步对象中的异步操作执行完成之后,再执行想要执行的东西。

  • resolve表示将状态变成成功完成,reject表示将状态变成失败完成
  • 当resolve方法执行完成之后,再执行then方法
   let p = new Promise((resolve, reject) => {setTimeout(() => {console.log('执行完毕');resolve();// 表示完成}, 3000)})p.then(() => {console.log('promise异步操作完成了');})

3. Promise传参

resolve里的参数可以传给then

    let p = new Promise((resolve, reject) => {setTimeout(() => {console.log("执行完毕");resolve(3)}, 1000);})p.then((d) => {console.log("接收到resolve传递的参数:", d);})

4. promise错误处理

reject中存储错误的参数,可以传给then方法中的第二个参数

    let p = new Promise((resolve, reject) => {setTimeout(() => {// resolve(3) //执行成功传递的参数reject('404') //执行失败传递的参数}, 1000);})p.then((res) => {console.log("接收成功传递的参数", res); //没有resolve,不会经过这里}, (err) => {console.log('接收执行失败传递的参数:', err);})

5. promise对象的then方法 和catch方法

  • Promise对象的then方法有两个参数,一个是成功后的参数,另一个是失败的参数方法
 let a = 1;let promise = new Promise(function (resolve, reject) {if (a == 10) {resolve('成功')} else {reject("失败")}})//   promise.then(success,fail)promise.then(res => {console.log("成功调用", res);}, err => {console.log("失败调用", err);})
  • new Promise().catch() ————> 错误捕获
    promise.then(res => {console.log(res); // resolve}).catch(err => {console.log(err); // 等同于接受 上面的reject返回的失败})

6.Promise的方法

  • promise.resolve("成功"),将现有的东西,转成一个Promise对象,且是resolve成功状态
    let p1 = Promise.resolve('123');p1.then(res => {console.log(res);})
  • promise.reject('失败'),将现有的东西,转成一个promise对象,且是reject失败状态
    let p2 = Promise.reject('456');p2.catch(err => {console.log(err);})
  • Promise.race():与Promise.all() 的不同之处在于,它将与第一个传递的promise相同的完成方式被完成。他可以是resolves,也可以使rejects,这要取决于第一个完成的方式是两个中的哪个。
    // 如果传的跌代是空的,则返回的 promise将永远等待。// 如果迭代包含一个或多个非承诺值和/或已解决/拒绝的承诺,则Promise.race将解析成为迭代中找到的第一个值。let p1 = Promise.reject('aaa')let p2 = Promise.reject('bbb')let p3 = Promise.reject('ccc')Promise.race([p1, p2, p3]).then(res => {console.log(res);}).catch(err => {console.log(err); //输出aaa})
  • Promise.all() ————> 一个脚本中有多个promise时,监控多个Promise对象
//   promise.all([p1,p2,p3]):把promise打包,扔到一个数组里面,打包完还是一个promise对象let p1 = new Promise((resolve, reject) => {let time = Math.random() * 4000 + 1000;setTimeout(() => {console.log('P1完成');resolve();}, time)})let p2 = new Promise((resolve, reject) => {let time = Math.random() * 4000 + 1000;setTimeout(() => {console.log('p2完成');resolve()}, time);})let p3 = new Promise((resolve, reject) => {let time = Math.random() * 4000 + 1000;setTimeout(() => {console.log('p3完成');reject()}, time);})// 必须确保所有Promise 对象都是resolve状态let p = Promise.all([p1, p2])p.then(() => {// p1 和 p2 全部执行完毕后,才会执行then方法里面的操作console.log('全部执行完成');})

7. 案例:用户登录成功后再获取用户信息

 let status = 1;let userLogin = (resolve, reject) => {setTimeout(() => {if (status == 1) {resolve({data: '登陆成功',msg: 'xxxx',token: "xxsdasdfsa"})} else {reject("失败了")}}, 2000);}let getUserInfo = (resolve, reject) => {setTimeout(() => {if (status == 1) {resolve({data: "获取用户信息成功",msg: "cdcdcd",token: "sndishishdissdsmmsadf"})} else {reject('失败了')}}, 1000);}new Promise(userLogin).then(res => {console.log("用户登录成功");return new Promise(getUserInfo)}).then(res => {console.log('获取用户信息成功');console.log(res);})

Promise的作用及用法相关推荐

  1. PreTranslateMessage作用和用法

    PreTranslateMessage作用和用法 PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗体的消息都要通过这里,比較经常使用,当 ...

  2. java package作用_java import、package作用与用法

    java import.package作用与用法 有些人写了一阵子Java,可是对於Java 的package 跟import 还是不太了解很多人以為原始码 .java 档案中的import 会让编译 ...

  3. MySQL数据类型中DECIMAL的作用和用法

    在MySQL数据类型中,例如INT,FLOAT,DOUBLE,CHAR,DECIMAL等,它们都有各自的作用,下面我们就主要来介绍一下MySQL数据类型中的DECIMAL类型的作用和用法. 一般赋予浮 ...

  4. php中pre标签,html中pre标签与code标签的作用与用法

    HTML 标签 定义和用法 pre 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. 标签的一个常见应用就是用来表示计算机的源代码. 可以导致 ...

  5. PHP中的常见魔术方法功能作用及用法实例

    这篇文章主要介绍了PHP中的常见魔术方法功能作用及用法实例,本文讲解了构造函数和析构函数__construct()和__desctruct()以及属性重载(Property Overloading)_ ...

  6. 、简述global关键字的作用_在C#编程中global关键字的作用及其用法

    在C#编程中,global 是 C# 2.0 中新增的关键字,理论上说,如果代码写得好的话,根本不需要用到它.今天就为大家展示下global关键字的作用及其用法,希望对大家学习C#编程有所帮助. 假设 ...

  7. chrome中Blackbox Script 黑盒脚本作用及用法

    chrome中Blackbox Script 黑盒脚本作用及用法 Blackbox Script功能 每天前端人员在调试代码的时候,都可能会遇到代码调试着会进入第三方库文件,带来很多没必要的调试,不方 ...

  8. C#中using关键字的作用及其用法(转)

    C#中using关键字的作用及其用法 using的用途和使用技巧.     using关键字微软MSDN上解释总共有三种用途:     1.引用命名空间.     2.为命名空间或类型创建别名.    ...

  9. Vue 中的 v-cloak 作用及用法

    v-cloak 的作用和用法 用法: 这个指令保持在元素上直到关联实例结束编译.和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Must ...

最新文章

  1. python有趣代码-盘点10个一行强大的、有趣的Python源代码
  2. Java黑皮书课后题第5章:**5.45(统计:计算平均值和标准方差)在商务应用中……编写一个程序,提示用户输入10个数字,然后运用下面的公式,显示这些数字的平均值以及标准方差
  3. Linux Centos7 以及window 10 Kali2020.4 安装 nvm node npm cnpm yarn
  4. 张家辉申请“渣渣辉”商标,真的很有知识产权意识了
  5. mysql 存储过程复杂查询_SQL分页存储过程 支持连接查询等复杂的SQL
  6. 深度理解依赖注入(Dependence Injection)
  7. RabbitMQ用户角色及权限控制
  8. 关于软考的一些事,你知道吗?
  9. 数据分析5大软件Excel、SAS、R、SPSS、Python优势分析
  10. mysql id 主键 外键_mysql主键 外键
  11. webgl1到webgl2_我如何使用WebGL重建Gorillaz Andromeda音乐视频
  12. 微信小程序实现下拉框功能
  13. 阿里云服务器申请流程
  14. 明明都保意外,定期寿险和意外险到底区别在哪里?
  15. CSS3 2D转换3D转换
  16. Android简易项目SQLite的简单运用——简易记事本
  17. 十二个“一”的大五人格分析
  18. trunc()用法和add_months()
  19. 在股权登记日或股息登记日买进的股票,能否分到红利?除权除息日卖出,还享有红利吗
  20. 星座夫妻(真的很准)

热门文章

  1. 三、python调用打印机,打印文字
  2. C++ 在图片上打印文字并保存图片
  3. python openCv 入门学习-RGB转HSV、掩膜的简单理解(二)
  4. 使用JMETER进行REST API测试
  5. QQ浏览器X5内核问题汇总 转
  6. 服务于离群点检测的无监督特征选择值-特征层次耦合模型
  7. KGE性能指标:MRR,MR,HITS@1,HITS@3,HITS@10
  8. 视频类网站的简单研究
  9. Jace Config
  10. Git:SSL错误导致失败的解决办法