Promise的关键点笔记
2021/6/20 23:29:12
本文主要是介绍Promise的关键点笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Promise简介:
Promise对象用于表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值。
Promise的次要作用:
Promise是为了解决代码的嵌套问题。
有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。
Promise的特点:
Promise里的内容会立即执行。
Promise的三个状态:
- pedding(进行中)
- rejected(已失败)
- fulfilled(已成功)
只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。
Promise的使用:
const promise = new Promise((resolve, reject) => { if (/* 异步操作成功 */) { resolve(value); } else { reject(error); } })
Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。
也可以使用.then.catch.finally进行处理:
const promise = new Promise((resolve, reject) => { // 发起异步请求 if (/* 异步操作成功 */) { resolve(value); // resolve对应.then方法 } else { reject(error); // reject对应.then方法的第二个参数,和.catch方法 } }); promise.then((data) => { console.log("这是resolve过来的") }, (err) => { console.log("这是reject过来的") }) promise.catch((err) => { console.log("这是reject过来的") }) promise.finally(() => { console.log("不管咋地都会执行我") })
Promise.all的使用:
const promise1 = new Promise((resolve, reject) => { // 像上面一样进行异步操作然后触发resolve和reject }); const promise2 = new Promise((resolve, reject) => { // 像上面一样进行异步操作然后触发resolve和reject }); Promise.all([promise1, promise2]) .then(([data1, data2]) => // 全部成功进行处理) .catch(([err1, err2]) => // 有任意一个失败进行处理) .finally(() => // 无论如何都会执行)
注意,如果作为参数的 Promise 实例,自己定义了catch方法,那么它一旦被rejected,并不会触发Promise.all()的catch方法。
Promise的小技巧及注意事项
- Promise的.then是成功后触发的回调函数,回调函数中的参数是请求回来的内容。
- 有任何一个Promise是reject的,就会执行catch回调函数,回调函数中是错误信息。
- Promise的.then可以链式调用。
- 不管是then还是catch都会执行finally。
- Promise.all(参数是一个数组,数组里面放Promise)。 注意:必须是全部都是成功返回才会执行,有其中任意一个出错都不会执行.then(rejected)。
小总结:
Promise对象一般用来处理异步(请求)事件的,根据异步请求回来的结果去操作相对应的成功或者失败的回调函数,Promise对象有一个参数是函数,这个函数又有俩个参数分别是resolve和reject,(这是俩个函数)分别代表成功和失败,如果成功了你可以调用resolve()而后通过你这个Promise对象的.then去进行操作,如果失败了可以调用reject()而后通过Promise对象的.then的第二个参数或者.catch进行失败的处理。.catch的用处就是在你的Promise对象中触发了reject后才会走.catch。Promise还有一个.finally不管是resolve还是reject都会执行。
这篇关于Promise的关键点笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
- 2024-09-27Sentinel配置限流资料:新手入门教程
- 2024-09-27Sentinel配置限流资料详解
- 2024-09-27Sentinel限流资料:新手入门教程
- 2024-09-26Sentinel限流资料入门详解
- 2024-09-26Springboot框架资料:初学者入门教程
- 2024-09-26Springboot框架资料详解:新手入门教程
- 2024-09-26Springboot企业级开发资料:新手入门指南
- 2024-09-26SpringBoot企业级开发资料新手指南
- 2024-09-26Springboot微服务资料入门教程