PS~: Promise是一个构造函数,自己身上有all、reject、resolve等几个方法,原型上有then、catch等几个方法。

Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。

一、Promise有以下三种状态:

pending: 初始状态,既不是成功,也不是失败状态 , ( 等待中 , 或者进行中 , 表示还没有得到结果 )

fulfilled: 意味着操作成功。

rejected: 意味着操作失败。

Promise有两种状态改变的方式,而且状态只能从pending改变为resolved或者rejected,并且不可逆。当状态发生变化,Promise.then绑定的函数就会被调用。

注意:Promise一旦新建就会「立即执行」,无法取消。这也是它的缺点之一。

二、我们使用new来构建一个Promise。

Promise接受一个「函数」作为参数,该函数的两个参数分别是resolve和reject。这两个函数就是就是「回调函数」

resolve函数的作用:在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;

reject函数的作用:在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

data为:字符串‘成功’ 或者字符串‘失败’

如果异步操作获得了我们想要的结果,那我们将手动调用resolve函数,在then的第一个作为参数的匿名函数中可以获取数据,如果我们得到了错误的结果,调用reject函数,在then函数的第二个作为参数的匿名函数中获取错误处理数据。 这样,一个次完整的Promise调用就结束了。

三、.then()

then()方法执行后会返回一个新的Promise实例。它有两个参数,分别为:Promise从pending变为fulfilled和rejected时的回调函数(第二个参数非必选)。这两个函数都接受Promise对象传出的值(data)作为参数

语法

onCompleted(必传参数):操作成功完成时要运行的履行处理程序函数。

onRejected(选传参数):操作被拒绝时要运行的错误处理程序函数。

Promise任务链

对于Promise的then()方法,then总是会返回一个Promise实例,因此你可以一直调用then,形如p().then().then().then().then().then().....

1)如果then没有传入处理函数,那么会返回一个继承了上一个处理状态的Promise对象

打印结果

2)如果then传入处理函数,那么默认返回一个fulfilled/resolved状态的Promise对象

打印结果

3)如果then传入处理函数,通过处理函数显示的return了一个新的Promise,那么返回这个显示的Promise对象

打印结果

弊端:不易中途终止后续任务执行

四、.catch()

处理rejected 的情况,与then的第二个参数onRejected相同

打印结果↑

打印结果↑

可以捕获.catch以上的任一错误(前提是:.then中的onRejected函数没有做任何处理)

补充~:

1).catch与.then中的onRejected函数冲突,如果前面.then中出行了onRejected函数,.catch将不会执行。

2).catch执行后会返回一个Promise对象,且状态默认为fulfilled/resolved(与.then相似)

五、.all   

多任务处理

打印结果

需要等(p1、p2)所有promise执行完,才可以执行then

六、.race

打印结果

(p1、p2)只要有一个执行完,就会执行then。

Promise的使用方法相关推荐

  1. [JavaScript] promise中.then()方法

    promise中.then()方法 promise的构造函数是同步执行 promise.then中的函数是异步执行 .then()异步执行 : 当此方法执行完后再执行内部的程序是避免了没有获取到数据 ...

  2. es6 Promise.prototype.catch()方法

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

  3. es6 Promise.prototype.then()方法

    Promise.prototype.then()方法 Promise 实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的.它的作用是为 Promise ...

  4. Uncaught (in promise)的解决方法,可能原因

    Uncaught (in promise) 的解决方法,可能原因:仅仅只是一种参考原因 我是因为copy的项目直接修改的,结果一直报错 Uncaught (in promise),检查发现接口请求数据 ...

  5. Uncaught (in promise) 的解决方法,可能原因

    Uncaught (in promise) 的解决方法,可能原因:仅仅只是一种参考原因 我是因为copy的项目直接修改的,结果一直报错 Uncaught (in promise),检查发现接口请求数据 ...

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

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

  7. 为promise部署complete方法

    思想:在promise的prototype上新增该方法 Promise.prototype.complete=function(callback){             let p=this.co ...

  8. (基础)Promise中catch()方法使用,捕获错误(拒绝)

    如果Promise抛出错误,then中没有处理就会报错 报错情况 // 这样会报错,因为没有处理promise的拒绝 const promise = new Promise((resolve, rej ...

  9. 前端Uncaught (in promise) 的解决方法及原因

    第一种 最简单的 就是在方法后面加上.catch((e) => {}),可以解决问题,如果不行的话,不防试试第二种情况 第二种 在Vue项目中使用axios调用一个第三方的接口时,前端无法获取到 ...

最新文章

  1. 8.1shell介绍 8.2命令历史 8.3命令补全和别名 8.4通配符 8.5输入输出重定向
  2. android获取string.xml的值(转)
  3. FastReport分页和空行填充
  4. python Gevent – 高性能的Python并发框架
  5. python中如果要多次输入文本,关于文本游戏:文本游戏 – 如果语句基于输入文本 – Python...
  6. 连Python都不熟也能跑通AI人脸识别?“隐藏Boss”竟是它!
  7. java Excel导入、自适应版本、将Excel转成Listmap对象
  8. LeetCode之同构字符串
  9. 20200619每日一句
  10. softmgr主程序_为什么我电脑打开后,我的电脑打不开,控制面板一
  11. 【ASP.NET】——asp.net入门
  12. oracle提高like速度,sql语句提升like效率
  13. OpenShift 4 - 在 GitOps 中使用 SealedSecret 保护敏感数据
  14. 【SearchString Algorithm Training】谭爷剪花布条
  15. 中国微信生态行业投资价值分析及发展趋势预测报告
  16. 逻辑赋值(Logical Assignment)
  17. 网络仿真工具eNSP安装教程
  18. WiFi从ap模式修改为sta模式
  19. Ant Design Vue <a-upload>上传文件
  20. H G W S哪一个不是状态函数_G.Strang的微分方程和线性代数(2.4)受迫振荡和指数响应...

热门文章

  1. Chrome调试骚操作
  2. Unity实现简单贪吃蛇
  3. C语言转义字符\数字 八进制和十六进制学习
  4. web漏洞之sql注入
  5. 第二次上机作业 大连理工大学
  6. C语言实战篇-----调试关键参数+printf输出_文件名_函数名_执行数!!!
  7. vscode 下载 安装
  8. VS2015报错C4996处理
  9. 时间复杂度的规则与计算
  10. P3951 小凯的疑惑