Promise构造函数接受一个函数作为参数,其中该参数又接受两个函数作为它自身的参数,分别是resolve和reject(也可以起其它的名字)。对于promise对象、resolve和reject函数的作用理解如下:

1.new Promise()返回一个promise对象,该对象共有三种状态:进行中、已完成和失败,回调函数的调用是根据对象的状态来完成的;该对象的原型上拥有then和catch等方法。

2.在构造函数参数的内部执行自定义的一些代码,通过代码的执行结果来选择调用resolve方法还是reject,例如下图中就是通过传入的num值来决定执行哪个方法。

3.resolve方法的作用是把promise对象的状态从进行中变成已完成,同时可以向resolve方法传入参数,这个参数会在将来被promise对象的then方法获取,而reject方法也是同样的道理,只不过是把promise对象状态变成失败,同时传入的参数会被catch方法获取而已。

4.也就是说,resolve和reject方法的作用只不过是根据代码逻辑,把promise对象的状态置为已完成或失败,同时通知promise方法的then方法或catch方法:我们已经修改promise对象的状态,接下来需要你们(then和catch)根据对象的状态决定走哪条路。说白了,resolve、reject就是promise对象和then、catch之间的狗腿子。

5.整个过程可以总结为:当resolve或reject修改promise对象状态之后,通过检测promise对象的状态,决定执行then还是catch回调方法。在这个过程中:resolve和reject起到的作用是修改对象状态、通知回调函数以及传递回调函数可能需要的参数。这样做的好处就是:把逻辑判断和回调函数分开处理。

例如下图中的代码运行结果:



延伸至axios:
因为axios是基于promise的,因此axios异步请求也返回一个promise对象,所以有axios().then()这样的写法,这说明axios本身已经对异步请求的过程做了封装,若请求成功则传递响应内容给then方法,否则传递给catch方法。

对promise、resolve和reject的简单理解相关推荐

  1. ES6 — Promise基础用法详解(resolve、reject、then、catch,all,)

    ES6 - Promise基础用法详解 Promise 是一个构造函数,它自身拥有all.reject.resolve这几个眼熟的方法, 原型上有then.catch等同样熟悉的方法. 所以,在开始一 ...

  2. Promise初步详解(resolve,reject,catch

    Promise其实是一个构造函数,它有resolve,reject,race等静态方法;它的原型(prototype)上有then,catch方法,因此只要作为Promise的实例,都可以共享并调用P ...

  3. promise简单理解

    1.什么是promise 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件的结果. 从语法上说,Promise 是一个对象,从它可以获取异步操作的消息. Promise 提供统 ...

  4. JavaScript系列之Promise的resolve、reject、then、catch

    文章の目录 一.什么是Promise 二.Promise的优点 三.promise的三种状态 四.简单使用 1.Promise()构造器 1.1.概述 1.2.语法 1.3.参数 1.4.返回值 2. ...

  5. ES6---new Promise()讲解(尤其注意里面的参数resolve、reject)

    ES6-new Promise()讲解(尤其注意里面的参数resolve.reject) 直接打印出来看看吧,console.dir(Promise). 这么一看就明白了,Promise是一个构造函数 ...

  6. promise异步请求串行异步then并行异步all竞争异步race 传递参数resolve(then)reject(catch)

    1.印象 古人云:"君子一诺千金",这种"承诺将来会执行"的对象在JavaScript中称为Promise对象. Promise就是解决多个异步请求的问题 Pr ...

  7. Promise构造函数的方法1:Promise.resolve()和Promsie.reject()

    1.promise.resolve() 它是成功状态的Promsie的一种简写方式. 参数传递:(以下重点掌握一般参数的传递): 1)一般参数和参数为空的情况下,直接返回一个resolved状态的Pr ...

  8. 简单理解XHR、Ajax、Axios、Promise

    什么是异步请求? 请求:客户端向服务器请求数据! 无异步请求:在完整网页上发送任何请求,都会导致整个页面的全部刷新! 有异步请求:可以实现网页的局部刷新! 如何查看网页的异步请求(XHR)? F12= ...

  9. JavaScript异步与Promise基本用法(resolve与reject)

    Promise解决的问题 相信每个前端都遇到过这样一个问题,当一个异步任务的执行需要依赖另一个异步任务的结果时,我们一般会将两个异步任务嵌套起来,这种情况发生一两次还可以忍,但是发生很多次之后,就形成 ...

  10. promise对象里resolve和reject状态讲解及Promise.all()的使用

    举例: 同步异步可以说是对被请求方来说的,被请求者使用什么方式来告知处理结果 思考,思考.......,好了,有答案了,当场告诉你 -------- 同步 这个问题需要一点时间,你先做点别的,等我想好 ...

最新文章

  1. 小学生python入门-如何看待小学生开始学Python?
  2. 设计模式-Strategy模式
  3. Android中dp与px互转的方法
  4. 工作325:uni-格式化日期
  5. 线程属性 pthread_attr_t
  6. 编译asp.net文件为dll文件
  7. 服务器系统win12可以安装CAD,技术员教你解决win10系统安装CAD2012的教程介绍
  8. 深度linux 官网,深度OS
  9. 京东返利PHP采集关键字,php 抓取京东产品数据-标题,价格,首图片
  10. etcd系列深入浅出客户端
  11. OCCT v11.0.16 x64 电脑硬件检测烤鸡软件中文
  12. Zynga公布2021年第一季度财务业绩
  13. SpringBoot从入门到精通教程(三十)- 支付宝企业支付集成(五分钟集成)
  14. multi_match 查询【muti_match和match区别】
  15. 【CSS】背景样式(颜色、图片、平铺、附着和位置)
  16. echarst环形进度,官网https://echarts.apache.org/examples/zh/index.html
  17. 经典加密算法的实现与破解大素数生成算法
  18. star-rating评分插件的使用
  19. 百亿级通用推荐系统实践
  20. 机器学习实战(1)——线性分类器+Logistic回归解决良/恶性乳腺癌肿瘤预测问题

热门文章

  1. matlab中dstep与step,DINT和DWORD的区别
  2. DSP中EALLOW,EDIS,EINT,DINT,ERTM,DRTM的作用
  3. 有趣!用太极拳讲分布式理论,真舒服!
  4. python任务调度demo-百度贴吧签到
  5. 深信服测试开发日常实习岗位一面凉经(来自李某)
  6. 何凯明深度残差网络翻译
  7. 打印机共享计算机密码,打印机共享需要密码怎么办?
  8. UVa12235: Help Bubu 题解
  9. RabbitMQ使用例子
  10. cgi进程设置多少 宝塔_【存档】新手宝塔建站详细步骤