简单了解Promise

名词约定


promise的话,有以下名词约定:

  • promise(首字母小写)对象指的是"Promise实例对象"
  • Promise(首字母大写且单数形式)表示"Promise构造函数"
  • Promises(首字母大写且复数形式)用于指代"Promises规范"

一、什么是promise:


  • Promise,简单来说就是一个容器,里面保存着某个未来才会结束的事件的结果。(通常是一个异步的结果)

  • Promise也是在js中进行的异步编程的新的解决方案。(以前旧的方案是单纯的使用回调函数)

  • 从语法和本质上来说的话,promise是一个构造函数,对外提供统一的API,自己身上有all、reject、resolve等方法,原型上有then、catch等方法。

  • 从功能上来说的话,promise对象用来封装一个异步的操作,并且可以获得成功或失败的返回值。

  • JS中常见的异步操作:定时器、AJAX中一般也是异步操作(也可以同步),回调函数可以理解为异步(不是严禁的异步操作等...)

二、Promise的两个特点


  1. Promise对象的状态不受外界影响

1)pending 初始状态(也就是未决定的)

2)fulfilledresolved 成功状态

3)rejected 失败状态

Promise有以上三种状态,只有异步操作的结果可以决定当前是哪一种状态,其他任何操作都无法改变这个状态。

  1. Promise的状态一旦改变,就不会再变,任何时候都可以得到这个结果,状态不可以逆,只能由pending变成fulfilled或者rejected(说白了就是:一个promise对象只能改变一次,无论成功或者失败都会有一个结果数据。成功称为value;失败称为reason)

三、为什么要使用Promise呢?


  1. promise使用回调函数更灵活,旧的回调函数必须在启动异步任务之前指定。
  2. promise:启动异步任务 => 返回promise对象 => 给promise对象绑定回调函数(甚至能在异步任务结束后指定多个)
  3. promise支持链式调用,可以完美的解决回调地狱的问题。(回调地狱就是多层回调函数嵌套使用,说白了就是套娃,这样就不利于阅读和异常处理)

四、使用new来创建一个promise对象


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

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

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

const promise = new Promise((resolve, reject) => {
    // do something here ...
    if (success) {
        resolve(value); // fulfilled
    } else {
        reject(error); // rejected
    }
});

五、Promise的API使用:


  1. Promise 的构造函数:Promise(executor){}

(1)executor 函数:执行器 (resolve,reject)=> {}。
(2)resolve 函数:内部定义成功时调用函数 value => {} 。
(3)reject 函数:内部定义失败时调用函数 reason => {} 。

注意:Promise内部会立同步即调用executor,异步操作在执行器里执行。

  1. then()

方法:Promise.prototype.then(onResolved, onRejected)=> {}

(1) onResolved 函数:成功的回调函数 (value) => {}
(2) onRejected 函数:失败的回调函数 (reason) => {}

注:指定用于得到成功value的成功回调和用于得到失败reason的失败回调是返回一个新的promise对象。

  1. catch()

方法:Promise.prototype.catch (onRejected) => {}

onRejected.函数: 失败的回调函数(reason)=> {}

注:只是失败的调用。then()的语法糖,相当于: then(undefined, onRejected)。

  1. resolv()

方法:Promise.resolve(value)=> {}

value: 成功的数据或promise对象

注:如果传入的参数为非Promise类 型的对象,则返回的结果为成功promise对象,如果传入的参数为Promise 对象,则参数的结果决定了resolve 的结果。

  1. reject()

方法:Promise.reject(reason) => {}

reason: 失败的原因

注:无论传入啥只返回一个失败的promise对象。

  1. all()

方法:Promise.all(promises)=> {}

promises: 包含n个promise的数组

注:返回一个新的promise,只有所有的promise都成功才成功,只要有一个失败了就直接失败。失败了返回那个失败值。

  1. race()

方法:Promise.race(promises)=> {}

promises: 包含n个promise的数组

注:返回一个新的promise,第一个完成的promise的结果状态就是最终的结果状态。
来一个例子:

 let p1 = new Promise((resolve,reject)=>{
          setTimeout(()=>{
              resolve('yes');
          },1000)
      })
      let p2 = Promise.resolve('success');
      let p3 = Promise.resolve('come');
      const result = Promise.race([p1,p2,p3]);
  		console.log(result);
posted @   Mrwtc  阅读(240)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示