Promise是一个构造函数,其身上有all、race、resolve、reject这些方法,都可以通过 Promise. 调用。

注意点1

Promise构造函数接受一个参数 => function,其中 function接受两个参数

resolve:表示从padding => resolve 成功

reject: 表示从padding => reject 失败

其状态不可逆

注意点2

在执行 all 或者 race 方法时:

all:语法 Promise.all([p1, p2, p3, ...]).then().catch()

只有p1、p2、p3 都成功才进入then,否则进入catch。虽然进入catch但是p1、p2、p3所对应的方法都还会继续执行

也就是说:p1最先执行完,但是有错误,此时进入了all的catch。但是此时p2、p3对应的函数还会执行,并不会停止

race:语法 Promise.race([p1, p2, p3, ...]).then().catch()

和all一样,唯一不同的是:p1、p2、p3 有一个成功,就算成功,进入then

注意点3:关于return的用法(什么时候加什么时候不加)

当Promise.then(onFulfilled, onRejected) 接收两个参数,一个是状态变为resolve后的回调函数,一个是状态变为reject后的回调函数(此处只讨论onFulfilled)

1、如果onFulfilled是一个函数,且有返回值,则返回值可以继续传递给后续的then

2、如果onFulfilled是一个函数,但没有返回值(相当于return undefined),则后续then中的入参为undefined

3、如果onFulfilled不是函数,则忽略当前then,将参数直接传递给后续的then

看如下代码

在函数aa中不用return,但是在函数bb需要return。否则在下边的msg 和 p 打印结果取不到。

其原因:和上边所说一样,then 接受是一个函数,且需要返回值,所以需要return

而在函数aa中不需要return的原因是:通过new Promise(resolve, reject) 中的resolve方法返回相当于自动将返回值,挂在了promise中

而在函数bb中,通过构造函数Promise下的resolve方法是没有挂在到当前的promise中,所以当调用then的时候拿不到返回值,因此这里需要自己手动return.

另外:

1、不管是函数aa还是函数bb最外层的return是为了拿到函数返回值,和promise没有关系

2、如果在函数aa的promise中也加了return,只是为了阻止代码继续向下执行而已,和取值没有关系,如下代码,return的作用只是为了不让console.log(111) 执行

function aa () {
return new Promise((resolve, reject) => {
setTimeout(() => {
return resolve({"msg": "aa"})
console.log(111)
}, 1000);
})
}

记住一点:通过new Promise(resolve,reject)的方式,当调用then去值的话不用加return,如果通过Promise.resolve获取的话,当调用then去值的话需要加return

最新文章

  1. linux(centOS)下安装Oracle步骤
  2. 苹果手机微信上form表单提交的问题
  3. Installing Chocolatey
  4. 为 PHP 开发者准备的 12 个调试工具
  5. Django 后台搭建
  6. 我的PHP之旅--XML操作
  7. 数据结构(树链剖分):BZOJ 4034: [HAOI2015]T2
  8. nuget 命令详解
  9. Java Math的floor,round,ceil函数小结
  10. Git子模块引用外部项目
  11. hibernate缓存机制(二级缓存)
  12. VMware安装Redhat6.5
  13. Long转Date/页面自定义标签
  14. CAN报文 Intel 格式与Motorola 格式的区别
  15. python selenium-webdriver 等待时间(七)
  16. 20164319 刘蕴哲 Exp1 PC平台逆向破解
  17. MySql 三大知识点,索引、锁、事务,原理分析
  18. Yann Martell《少年 pi 的奇幻漂流》
  19. easyui中多级表头,主表头不能添加field字段,否则不居中
  20. vmp3.0.9全保护拆分解析

热门文章

  1. css 特殊性 权重排列
  2. STM32F0使用LL库实现UART接收
  3. ASP.NET Core Web API通过中间件或UseExceptionHandler异常处理方法
  4. python学习之路---基础概念扩展:变量,表达式,算法,语句,函数,模块,字符串
  5. CF1067E 题解
  6. Mysql数据库基础第二章:(八)子查询经典案例
  7. vue引入swiper的报错以及swiper在vue中的交互事件处理
  8. 【otter搭建】在Linux下搭建阿里开源otter数据同步平台
  9. PAT-basic-1024 科学计数法 java
  10. react module.scss文件中弹窗中 keyframes动画不生效,