关于Promise及其执行顺序总结

本文详细介绍了Promise的基本概念、工作原理以及then方法和catch方法的使用。着重讨论了Promise时序,包括setTimeout和Promise的执行顺序,解析了微观任务和宏观任务的概念,帮助理解异步操作的执行流程。
摘要由CSDN通过智能技术生成

Promise简介


Promise 是一个对象,它代表了一个异步操作的最终完成或者失败。本质上 Promise 是一个函数返回的对象,我们可以在它上面绑定回调函数,这样我们就不需要在一开始把回调函数作为参数传入这个函数了。

约定

不同于“老式”的传入回调,在使用 Promise 时,会有以下约定:

  • 在本轮事件循环运行完成之前,回调函数是不会被调用的。
  • 即使异步操作已经完成(成功或失败),在这之后通过 then()添加的回调函数也会被调用。
  • 通过多次调用 then() 可以添加多个回调函数,它们会按照插入顺序进行执行。

Promise 很棒的一点就是链式调用(chaining)

Promise原理分析

Promise内部有三个状态:pendingfullfilledrejected
pending是对象创建后的初始状态,当对象fulfill(成功)时变为fulfilled,当对象reject(失败)时变为rejected。且只能从pengding变为fulfilled或rejected ,而不能逆向或从fulfilled变为rejected 、从rejected变为fulfilled。如图所示:
promise状态

Promise实例方法介绍

Promise对象拥有两个实例方法then()catch()

then()方法

成功和失败的回调函数我们是通过then()添加,在promise状态改变时分别调用。promise构造函数中通常都是异步的,所以then方法往往都先于resolve和reject方法执行。所以promise内部需要有一个存储fulfill时调用函数的数组和一个存储reject时调用函数的数组。

then方法可以接收两个参数,且通常都是函数(非函数时如何处理下一篇文章中会详细介绍)。

第一个参数会添加到fulfill时调用的数组中,第二个参数添加到reject时调用的数组中。

当promise状态fulfill时,会把resolve(value)中的value值传给调用的函数中。

var p = new Promise(function(resolve, reject){
   
    resolve(5)
}).then(function(value){
   
    console.log(value) //5
})

同理,当promise状态reject时,会把reject(reason)中的reason值传给调用的函数。

var p1 = new Promise(function(resolve, reject){
   
    reject(new Error('错误'))
}).then(function(value){
   
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值