概述:

是异步编程的一种解决方案。解决异步回调问题。

从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。

特点:

对象的状态不受外界影响。   Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)

一旦状态改变,就不会再变

Promise 内部的错误不会影响到 Promise 外部的代码

缺点:

Promise 新建后就会立即执行。

如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。

当处于 pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)

基本用法

const promise = new Promise(function(resolve, reject) {if (/* 异步操作成功 */){resolve(value);} else {reject(error);}
});promise.then(function(value) {// success
}, function(error) {// failure
});
promise.catch(err=>{  //reject,发生错误,别名console.log(err);
})

如果异步操作抛出错误,状态就会变为rejected,就会调用catch()方法指定的回调函数

then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected,异步操作抛出错误时调用。

但一般来说,不要在then()方法里面定义 Reject 状态的回调函数(即then的第二个参数),一般是使用catch方法。理由是第二种写法可以捕获前面then方法执行中的错误

一般建议Promise 对象后面要跟catch()方法,这样可以处理 Promise 内部发生的错误。catch()方法返回的还是一个 Promise 对象,因此后面还可以接着调用then()方法。

Promise.resolve()方法:有时需要将现有对象转为Promise对象,Promise.resolve方法就起到这个作用

Promise.resolve等价于new Promise(resolve=>resolve('foo'));

catch

Promise.prototype.catch()方法是.then(null, rejection).then(undefined, rejection)的别名,用于指定发生错误时的回调函数。

.then(null, (err) => console.log("rejected:", err));

then

Promise.prototype.catch()方法是为 Promise 实例添加状态改变时的回调函数。并且该方法返回一个新的Promise对象

then 方法接收两个函数作为参数,第一个参数是 Promise 执行成功时的回调,第二个参数是 Promise 执行失败时的回调,两个函数只会有一个被调用。

自己也可以写return的返回值 返回新的其他promise或其他值;如果返回新的Promise,那么下一级.then()会在新的Promise状态改变之后执行,如果返回其它任何值,则会立刻执行下一级.then()。没有明确返回值,就相当于return undefined,仍然不会影响Promise执行,即使在里面return false也不会影响下一步,false可以直接传到下一步。

Promise.resolve()

有时需要将现有对象转为 Promise 对象,Promise.resolve()方法就起到这个作用。

Promise.resolve('foo')
// 等价于
new Promise(resolve => resolve('foo'))

Promise.all

Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

const p = Promise.all([p1, p2, p3]);

只有p1p2p3的状态都变成fulfilledp的状态才会变成fulfilled,此时p1p2p3的返回值组成一个数组,传递给p的回调函数。

只要p1p2p3之中有一个被rejectedp的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的 catch方法。

Promise.all([p1, p2, p3]):  把promise打包,扔到一个数组里面,打包完还是一个promise对象,将多个 Promise 实例,包装成一个新的 Promise 实例。
必须确保,所有的promise对象,都是resolve状态,都是成功状态
Promise.race([p1, p2, p3]): 只要有一个成功,就返回

重新回头学习归纳ES6的知识点-------promise(承诺)相关推荐

  1. MIT6.824_2021_学习总结 分布式常见知识点

    目录 知识点 分布式系统原则 CAP BASE ACID和BASE的区别与联系 分布式一致性 线性一致性 顺序一致性 因果一致性 FIFO 一致性 最终一致性 分布式共识算法 Paxos: Raft: ...

  2. 想接触音频、视频的编码以及相关的知识,不知有没有一些归纳好的知识点?——知乎大神

    https://www.zhihu.com/question/31156766 想接触音频.视频的编码以及相关的知识,不知有没有一些归纳好的知识点? 一方面处于兴趣,一方面出于新项目的一些需求,想学习 ...

  3. jQuery学习归纳总结

    jQuery学习归纳总结 常用版本:jQuery-1.12.4.js(未压缩) jQuery-1.12.4.min.js(已压缩) // 引入jQuery <script src = 'jQue ...

  4. ES6中的Promise

    ES6中的Promise JavaScript本身是单线程语言,这在Node.js学习中已经反复强调过,因为单线程,就需要在程序进行IO操作时做"异步执行",比如最典型的网络操作- ...

  5. Longstick的学习周记——ES6新特性

    Longstick的学习周记--ES6新特性 前言 ES6新特性 1. let 和 const let关键字 const 关键字 2. 模块字符串\` \` 3. 解构 4. 函数的参数默认值 5. ...

  6. es6的Promise(承诺)

    es6的Promise(承诺) Promise中的所有回调函数,都是异步执行的 //用来解决异步的一些问题 let p = new Promise(function(resolve,refused){ ...

  7. dqn系列梳理_DQN是学习归纳出了策略,还是仅仅是memorize了大量的episodes?

    想要回答这个问题,就得追究什么才称得上"策略"?什么是"学习.归纳"?学习归纳和"memorize"又有什么不同? 现在的我大概没办法直接回 ...

  8. 学习webpack4 - ES6语法转化

    学习webpack4 - 基础配置 学习webpack4 - HTML处理 学习webpack4 - 样式处理 学习webpack4 - ES6语法转化 学习webpack4 - 第三方库的使用 学习 ...

  9. vue中集合取第一个_快速学习Vue框架(知识点集合)

    学习Vue的小伙伴速度看过来,快速学习Vue框架知识点集合贴来啦.建议收藏,尤其基础并不是很扎实的同学,本篇集合贴就是你日后工作的参考手册. 基础知识: ·vue的生命周期:beforeCreate/ ...

最新文章

  1. 二元logistic模型案例_二元逻辑回归的简介与操作演示
  2. iOS的相对路径和绝对路径
  3. python supervisord 远程命令执行漏洞(CVE-2017-11610)
  4. mac brew 安装_无用技能之 Mac 安装relion 步骤
  5. 网站维护:Linux服务器查看外网访问IP指令汇总
  6. 数据结构 单链表 (C++)(转载)
  7. python2.6 2.7 升级成3.6之后yum
  8. linux下camera驱动分析_LINUX设备驱动模型分析之三 驱动模块相关(DRIVER)接口分析...
  9. 深度LINUX不喜欢
  10. 利用构造函数实现累加
  11. c语言简单计算器减编程,C语言实现简单的计算器(加、减、乘、除)
  12. h5课件制作_教师必备:实用H5课件制作技巧
  13. windows平台服务监控邮件报警批处理脚本
  14. 闭关之 Vulkan 应用开发指南笔记(二):队列、命令、移动数据和展示
  15. 使用awk提取文本 awk处理条件 awk流程控制 awk扩展应用
  16. Android 如何开发指纹支付
  17. 在Home Assistant 添加MariaDB数据库
  18. GraphPad Prism v9.5.1.733 科研绘图软件多语言
  19. 赛马-25匹马选出前三名问题
  20. 大乐透号码生成器python_python随机生成 双色球 大乐透

热门文章

  1. 孙陶然:创业是从零开始的一次全新旅程
  2. 前淘宝技术专家谈12306:这个网站很神奇
  3. 批量修改AD账号Account
  4. cad墙线打断lisp_CAD绘制墙体时,不打断模式有什么好处?
  5. bigdata学习笔记--01 Linux基础--Linux目录结构
  6. P2P、P2SP游戏更新下载解决方案。
  7. 01入门及简单应用-ReentrantReadWriteLock原理-AQS-并发编程(Java)
  8. 服务器自带ddos工具,详解DDoS工具 一款流行DDoS木马工具
  9. 2014.华为实习招聘数字芯片(转)
  10. RFID医疗耗材柜管理系统中的解决方案