前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ES6-Promise语法与原理

ES6-Promise语法与原理

作者头像
小城故事
发布于 2024-08-24 00:52:31
发布于 2024-08-24 00:52:31
10800
代码可运行
举报
运行总次数:0
代码可运行

01. Promise作用: 解决回调地狱

1.1 回调地狱: 异步回调 层层嵌套

1.2 js代码分为2种: 同步(默认) 异步

  1. 同步: 按照顺序立即执行
  2. 异步: 没有顺序 延迟执行 (事件、定时器、ajax)

1.3 层层嵌套:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 1.1 一级分类
let xhr1 = new XMLHttpRequest()
xhr1.open('get', 'http://123.57.109.30:3999/api/categoryfirst')
xhr1.send()
xhr1.onload = function () {
    console.log('一级')
    console.log(JSON.parse(xhr1.response))

// 1.2 二级分类
let xhr2 = new XMLHttpRequest()
xhr2.open('get', 'http://123.57.109.30:3999/api/categorySecond?firstId=621')
xhr2.send()
xhr2.onload = function () {
    console.log('二级')
    console.log(JSON.parse(xhr2.response))

// 1.3 三级分类
let xhr3 = new XMLHttpRequest()
xhr3.open('get', 'http://123.57.109.30:3999/api/categoryThird?secondId=622')
xhr3.send()
xhr3.onload = function () {
    console.log('三级')
    console.log(JSON.parse(xhr3.response))
}
}
}
// 1.4 浏览器刷新打印顺序会不同
console.log(666)

02. Promise语法

2.1 调用构造函数 创建Promise实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// (resolve, reject) 是箭头函数的参数
let pro = new Promise((resolve, reject) => {
    // 异步代码
    setTimeout(function () {
    // resolve(1) // 成功 1是实参
       reject(2) // 失败
    }, 500)
})

2.2 调用Promise实例对象的then/catch方法

  • resolve本质就是调用res res是形参 resolve(1)是实参
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// resolve和reject状态二选一的
pro.then(res => {
    console.log(res)
}).catch(error => {
// reject失败则调用catch方法
    console.log(error)
})

2.3 Promise在创建实例时 里面代码会立即执行

  • Promise自己是同步的 只有then方法才是异步的

03. Promise工作原理

3.1 Promise是什么? 是ES6新增的构造函数 3.2 Promise作用: 解决回调地狱 3.3 Promise应用场景/原理 Promise对象有三种状态:

  1. pending 进行中(默认状态) 所以一旦创建Promise 里面代码会立即执行
  2. fuifilled 已完成
  3. rejected 已失败
  4. Promise相当于是一个容器 把异步代码放入容器中
  5. 状态只能改变一次 不管成功/失败 都会有一个数据结果

4. Promise对象状态只有两种状态:

  1. 调用resolve()方法时: 从pending变为fuifilled
  2. 调用reject()方法时: 从pending变为rejected
  3. 状态只能改变一次 不管成功/失败 都会有一个数据结果

5. Promise状态发生改变后 在任何时候都可以获取结果

  1. Promise实例的then方法获取成功结果
  2. Promise实例的catch方法获取失败结果

6. Promise在创建实例时 里面代码会立即执行

  • Promise自己是同步的 只有then方法才是异步的

04. Promise使用链式语法解决回调地狱

1. 创建Promise实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let p = new Promise((resolve, reject) => {
    // 创建xhr对象
    let xhr = new XMLHttpRequest()
    // 设置请求方式和url
    xhr.open('get', 'http://123.57.109.30:3999/api/categoryfirst')
    // 发送ajax请求
    xhr.send()
    // 注册响应事件函数
    xhr.onload = function () {
        console.log('一级')
        let res = JSON.parse(xhr.response)
    // 1.1 Promise成功状态
        resolve(res)
    }
})

2. 取出Promise实例对象结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p.then(res => {
    console.log(res)
})

3. 取出Promise实例对象的函数结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p1.then(res => {
    console.log(res)
})
p2.then(res => {
    console.log(res)
})
p3.then(res => {
    console.log(res)
})

4.1 三个实例对象只有url不一样 可封装成函数 帮我们创建Promise实例对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function fn(url) {
    return new Promise((resolve, reject) => {
    let xhr = new XMLHttpRequest()
    // 2.1 url是形参 调用时写入实参
    xhr.open('get', url) 
    xhr.send()
    xhr.onload = function () {
        let res = JSON.parse(xhr.response)
    // 2.2 Promise成功状态
        resolve(res)
    }
})
}

4.2 调用封装好的Promise实例对象函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let p1 = fn('http://123.57.109.30:3999/api/categoryfirst')
let p2 = fn('http://123.57.109.30:3999/api/categorySecond?firstId=622')
let p3 = fn('http://123.57.109.30:3999/api/categoryThird?secondId=621')

4.3 但打印结果还是随机的 因为只要创建代码就会立即执行

  • p1进行完后 return 返回p2的实例对象 .then可换行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p1.then(res => {
    console.log(res)
    return p2
})
.then(res => { 
// p2的then
    console.log(res)
    return p3
})
.then(res => {
// p3的then
    console.log(res)
})

5. Promise是如何解决回调地狱的呢?

  1. Promise通过链式调用解决回调地狱
  2. 链式调用: 在上一个then里 返回下一个Promise实例 就可以继续后面的then

05. Promise的all/race方法/语法

1. Promise的all方法 Promise.all

  1. 把多个Promise实例合并为一个新的Promise 结果为数组
  2. 所有Promise要全部成功 才会执行then 只要有一个失败就会执行catch
  3. then的结果为数组
  4. finally 不管成功失败都执行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function fn(url) {
    return new Promise((resolve, reject) => {
    let xhr = new XMLHttpRequest()
    xhr.open('get', url)
    xhr.send()
    xhr.onloadend = function () {
        let res = JSON.parse(xhr.response)
        console.log(res)
        resolve(res) // 成功状态
        
    }
    })
}
let p1 = fn('http://123.57.109.30:3999/api/categoryfirst')
let p2 = fn('http://123.57.109.30:3999/api/categorySecond?firstId=621')
let p3 = fn('http://123.57.109.30:3999/api/categoryThird?secondId=622')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let p = Promise.all([p1, p2, p3])
// 所有Promise要全部成功 才会执行then 只要有一个失败就会执行catch
p.then(res => {
// then的结果为数组
    console.log(res)
}).catch(error => {
    console.log(error)
}).finally(() => {
// finally 不管成功失败都执行
    console.log('我是finally 我完事了')
})

2. Promise的race方法 Promise.race

  1. 所有Promise谁最先成功 就会执行then 如果有失败就执行catch
  2. 这里res不是数组 谁最先成功就是谁
  3. then的结果为最快的那个Promise
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let pp = Promise.race([p1, p2, p3])
pp.then(res => {
    console.log(res, 'race方法')
}).catch(error => {
    console.log(error)
})

06. async/await异步函数

  1. async异步函数 async/await 主要帮我们执行Promise
  2. async作用: 修饰函数 让函数内部使用await
  3. await作用: 取代then 并获取then结果
  4. await 只能用于被async修饰的函数 否则报错 加上async变为异步函数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let p = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(1)
    }, 300)
})
// Promise实例对象的then方法
p.then(res => {
    console.log(res)
})

await语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
async function fn() {
// let res = await Promise对象
    let res = await p
    console.log(res)
}
fn()
// await箭头函数语法
let fn1 = async () => {
    let res = await p
    console.log(res)
// 2.2 let res = await 后面的代码
// 如果p是Promise对象 就正常执行Promise
    Promise((res, rej) => {
// 如果p不是Promise对象 就会把代码包在Promise里面
    }).then(res => {
// 后面的代码在then里
    })
}
fn1()

6.1 使用async/await解决回调地狱练习

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 1. 封装Promise实例对象函数
function fn(url) {
    return new Promise((resolve, reject) => {
        let xhr = new XMLHttpRequest()
        xhr.open('get', url)
        xhr.send()
        xhr.onloadend = function () {
            let res = JSON.parse(xhr.response)
            resolve(res)
        }
    })
}
// 2. 创建Promise实例
let p1 = fn('http://123.57.109.30:3999/api/categoryfirst')
let p2 = fn('http://123.57.109.30:3999/api/categorySecond?firstId=621')
let p3 = fn('http://123.57.109.30:3999/api/categoryThird?secondId=622')
// 3. Promise通过链式调用解决回调地狱
p1.then(res => {
    console.log(res)
    return p2
}).then(res => {
    console.log(res)
    return p3
}).then(res => {
    console.log(res)
})

// 01. 使用async/await解决回调地狱
// 1.1 await右边的代码就是Promise内部的代码 .then
async function fn1() {
    let res1 = await p1
    console.log('一级', res1)
    let res2 = await p2
    console.log('二级', res2)
    let res3 = await p3
    console.log('三级', res3)
// 1.2 分析: await下面的代码全都是then里的代码
    // p1.then(res1 => {
    //     console.log(res1)
    // p2.then(res2 => {
    //     console.log(res2)
    // p3.then(res3 => {
    //     console.log(res3)
    // })
    // })
    // })
}
fn1()

07. 了解axios底层原理/手写Promise封装xhr

7.1 以前使用的axios

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
axios.get('http://123.57.109.30:3999/api/categoryfirst').then(res => {
    console.log(res.data)
})

7.2 axios底层原理

  1. axios其实就是把xhr对象包装在Promise里面
  2. axios方法本质是返回一个Promise对象
  3. Promise内部是原生xhr发送ajax请求
  4. 请求成功则用resolve返回给Promise对象 结果给外面的then
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let p = axios.get('http://123.57.109.30:3999/api/categoryfirst')
console.log(p)
p.then(res => {
    console.log(res.data)
})

7.3 手写Promise源码封装xhr

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let fn = {
// 2.1 封装一个get函数
    get(url) {
// 2.2 创建Promise实例对象
        return new Promise((resolve, reject) => {
// 2.3 这里的代码是原生xhr对象
            let xhr = new XMLHttpRequest()
            xhr.open('get', url)
            xhr.send()
            xhr.addEventListener('loadend', function () {
                let res = JSON.parse(xhr.response)
                resolve(res)
            })
        })
    }
}
// 2.4 调用get方法 会返回Promise对象
let p1 = fn.get('http://hmajax.itheima.net/api/news') 
console.log(p1)
// 2.5 取出Promise实例对象结果
p1.then(res => {
    console.log(res)
})
// 2.6 简写语法
fn.get('http://hmajax.itheima.net/api/news').then(res => {
    console.log(res)
})
// 2.7 使用async/await简写
async function fn1() {
    let res = await fn.get('http://hmajax.itheima.net/api/news')
    console.log(res)
}
fn1()

7.4 使用axios异步函数依次加载-async/await

  • 使用async/await 依次加载一 二 三级的列表
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 1. 声明async异步函数
async function fn() {
    let res1 = await axios.get('http://123.57.109.30:3999/api/categoryfirst')
    console.log(res1.data)
// 2. await调用Promise 会取代Promise的then
// 3. 只要是await后面的代码都在then方法里
    let res2 = await axios.get('http://123.57.109.30:3999/api/categorySecond?firstId=621')
    console.log(res2.data)
    let res3 = await axios.get('http://123.57.109.30:3999/api/categoryThird?secondId=622')
    console.log(res3.data)
}
fn()

08. try-catch捕获异常

  1. Error对象: 内置对象 提示错误代码信息
  2. throw错误信息: 抛出异常 让控制台变红
  3. try-catch语法: 捕捉错误代码

8.1 try-throw语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try {
// 这里代码如果遇到错误 就会执行catch
    console.log(1)
// 在try里写throw就会执行catch
    throw '错误信息'
} catch (error) {
    console.log(error)
} finally {
    console.log(666)
}

8.2 应用场景

8.3 用于结束forEach(面试题)

  • throw主动抛出错误 就会结束try代码 然后立即执行catch
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try {
    let arr = [10,20,30,40,50]
    arr.forEach(i => {
        if (i == 30) {
// throw主动抛出错误 就会结束try代码 然后立即执行catch 
            throw 2
        }
        console.log(i)
    })
} catch (error) {
    console.log(error)
}

8.4 捕捉await的错误信息

  1. 错误的Promise走catch 但await走不了catch 只能then
  2. 所以使用try-catch方法 配合捕捉await错误
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
async function fn() {
    try {
// 错误的Promise走catch 但await走不了catch 只能then
// 所以使用try-catch方法 配合捕捉await错误
        let res = await axios.get('http://1hmajax.itheima.net/api/news')
        console.log(res.data)
    } catch (error) {
        console.log(error)
    }
}
fn()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
TIA V15 SP1 + STEP7 V5.6 + WINCC V7.X安装步骤
因TIA V15/V15 SP1 WinccPro与经典版的WINCC V7.X不兼容,即使卸载博途自带的WINCC也无法解决,而且经典版的WINCC即使安装上去,运行时也会出问题,运行画面为空白页。因此需要安装TIA V15/V15 SP1 WinccAdv才能再安装WINCC V7.X
剑指工控
2021/11/09
3.6K0
TIA V15 SP1 + STEP7 V5.6 + WINCC V7.X安装步骤
一个PLC用博图,一个PLC用STEP7,通讯怎么办?
S7-1200 与 S7-300 PN 之间的以太网通信可以通过 TCP 协议来实现,使用的通信指令是在双方 CPU 调用 T-block (TSEND_C,TRCV_C,TCON,TDISCON,TSEND,TRCV) 指令来实现。通信方式为双边通信,因此 TSEND 和 TRCV 必须成对出现。
剑指工控
2024/07/30
4521
一个PLC用博图,一个PLC用STEP7,通讯怎么办?
TIA能源管理套件SIMATIC Energy 示例项目下载
采用TIA博途中集成的能源管理套件(SIMATIC Energy Suite),无需编程,通过简单直观的组态就可实现
科控物联
2022/03/29
1.1K0
TIA能源管理套件SIMATIC Energy 示例项目下载
博途V17和博途万能密匙--百度网盘链接
链接:https://pan.baidu.com/s/1c89io-HFLQ-yZf-rDFz09w
科控物联
2022/03/29
20.4K1
博途V17和博途万能密匙--百度网盘链接
谈谈TIA 博途 V17加密方式的升级
1:S7-1500 PLC之间、PLC与PC使用TCP (TLS V1.2)通信,通信双方使用公钥与私钥异步加密双方的通信会话密钥,得到密钥后进行同步加密通信,通信双方需要使用CA生成数字证书。这里的CA为PLC的编程软件TIA 博途,如图所示。
剑指工控
2021/11/08
2.5K0
谈谈TIA 博途 V17加密方式的升级
TIA V18更新
在2022年 11 月 8 日至 10 日于纽伦堡举行的 SPS 贸易展览会上,西门子将展示其工程框架 TIA Portal (Totally Integration Automation) 的版本 18)。如果工业公司要缩短其上市时间,抵消缺乏技术工人,并保持竞争力,他们需要高效的自动化工程可以快速修改以满足新的要求。这就是为什么新版本的TIA Portal 再次提高工程效率并提供优化的多用户工程的功能。这意味着用户现在可以团队合作同时在项目上构建和管理共享库。访问权限可以是单独分配或特定于组分配,这使得协作更加灵活的。接下来我们就看看TIA V18有哪些更新。
剑指工控
2023/02/28
1.4K0
TIA V18更新
OPC的以太网S7通信(TIA)
SIMATIC S7- 300 CPU集成了 PROFINET 接口,该接口除了具备连接 PROFINET总线通信功能,同时还可用于 OPC 通信。本文介绍了西门子工业控制网络SIMATIC NET以及用于ETHERNET的OPC服务器,详细讲述了通过ETHERNET建立OPC 服务器与S7 PLC 的S7连接的组态配置方法。
科控物联
2022/03/29
2.4K0
OPC的以太网S7通信(TIA)
[Simens]Modbus TCP V6.0 新功能
【导读】MODBUS TCP 指令 V6.0 增加了 Modbus 客户端功能码 23,可以在一次请求作业下实现从服务器读取和写入一个或多个保持性寄存器,这样省去了轮询的编程工作
科控物联
2022/03/29
3.3K0
[Simens]Modbus TCP V6.0 新功能
TIA V15.1发布,来看看有什么新功能
TIA V15.1终于发布了,按照西家常规惯例,只有出了SP1之后,这个软件版本才算稳定和成熟,所以相信更多V14的兄弟们会移步到V15,那我们今天就来看看V15.1到底更新了什么?另外文章附带了TIA V15.1官方安装包下载链接!
剑指工控
2021/11/09
1.8K0
TIA V15.1发布,来看看有什么新功能
西门子TIA博途款工程平台软件-TIA Portal v17(博途)下载安装教程
TIA Portal(Totally Integrated Automation Portal)是西门子公司推出的一款全集成自动化工程软件,包含了PLC编程、HMI编程、驱动编程、SCADA编程等多种功能。TIA Portal v17是该软件的最新版本,具有以下主要功能:
用户10519170
2023/04/20
6.2K0
西门子TIA博途款工程平台软件-TIA Portal v17(博途)下载安装教程
「Portal] V17及UP1补丁--附万能授权
百度链接:https://pan.baidu.com/s/1c89io-HFLQ-yZf-rDFz09w
科控物联
2022/03/29
3.8K0
「Portal] V17及UP1补丁--附万能授权
【工控技术】通讯功能块 FC50 和 FC60 编程
通讯功能块 FC50 “AG_LSEND” 和 FC60 “AG_LRECV”的特点:
剑指工控
2021/11/09
1.3K0
【工控技术】TIA 博途 V13 中怎样通过关键字 "AT" 实现变量覆盖?
通过关键字 “AT” 可覆盖一个 S7-1200/S7-1500 中已声明的变量。
剑指工控
2021/11/09
4.2K0
【工控技术】TIA 博途 V13 中怎样通过关键字 "AT" 实现变量覆盖?
聊聊西门子TIA V17 的CFC编程究竟怎么样
西门子发布了TIA V17,其中STEP7软件编程语言增加了CEM和CFC引得工程师们兴致勃勃,其中对CFC的讨论最为激烈,今天专门为大家来解读TIA V17的一些CFC功能。
剑指工控
2021/11/05
2.2K0
博途V17-轴功能与优化
借助PLC中集成的运动控制功能,可以轻松高效地控制单轴和多轴驱动系统。SIMATIC 控制器和工艺模块,辅以 SINAMICS 驱动系统,提供了完美协调的产品组合。如果驱动器通过PLC的工艺对象进行定位调速工作,则它们被称为单轴。针对单轴运动控制来说,其运动需要具有高动态和重复精度高的需求,西门子的工艺对象特别适用于这样的运动过程。典型的单轴是速度轴和定位轴,例如传送带和提升定位。用户可以对机器中多个单轴的动作进行编程,以在机器中实现所需的运动。
科控物联
2022/03/29
6K0
博途V17-轴功能与优化
【工控技术】如何向未组态在同一个多项目中的H CPU发送数据?
在S7程序中,你可以通过“SEND_R”和“REC_R”块传送一个32 位REAL值或者单独的32个BOOL量,或者“SEND_BO”和“REC_BO”(128个BOOL值)实现数据交换。这些程序块在“PCS 7 Library V7x”和“PCS 7 Library V8.x”的“COMM”文件夹中。
剑指工控
2021/11/09
7960
西门子S7系列PLC安全防护研究
近年来,随着中国制造的不断崛起,工业控制系统已成为国家关键基础设施的重中之重,工控系统的安全问题也随之而来。工控产品的多样化,造成了工控系统网络通讯协议不同,大量的工控系统采用私有协议,从而导致协议存在缺乏认证、功能码滥用等安全威胁;况且不断被爆出的工控产品漏洞,也难以及时修补等问题。
FB客服
2020/04/07
1.5K0
西门子S7系列PLC安全防护研究
​SIMATIC S7‑1500R/H​ 冗余系统3--S7-1500 R/H-CPU
S7-1500R/H 冗余系统允许 PROFINET 环网中的两个 R-CPU 或 H-CPU 中有一个发生故障。如果主 CPU 发生故障,则备用 CPU 将作为新的主 CPU 在中断点继续进行过程控制。
科控物联
2022/03/29
4.7K0
​SIMATIC S7‑1500R/H​ 冗余系统3--S7-1500 R/H-CPU
基于PROFINET技术的STEP7组态
摘要:PROFINET作为新型总线的代表,为自动化通信领域提供了一个完整的网络解决方案,可以兼容工业以太网和现有的现场总线(如PROFIBUS)技术。本文主要研究西门子STEP7组态软件中PROFINET通讯协议。结合近年来以太网技术的迅速发展情况,以及工业自动化控制系统的实时性、可靠性和扩充性的要求,简要介绍了PROFINET通讯配置和操作过程。
IRTeam-工业安全
2022/05/10
1.5K0
基于PROFINET技术的STEP7组态
个人经验泛谈之工控安全入门
最近几年,工控安全是越来越火,很多朋友问过我这样一个问题,如何学习工控安全?其实我自己也在学习工控安全,如何学习我也不能给你说怎么学才是正确的,快速的,只能说,我只是根据我个人的看法,来给出我的经验和方法。
p4nda
2023/01/03
1.9K0
个人经验泛谈之工控安全入门
相关推荐
TIA V15 SP1 + STEP7 V5.6 + WINCC V7.X安装步骤
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 01. Promise作用: 解决回调地狱
    • 1.1 回调地狱: 异步回调 层层嵌套
    • 1.2 js代码分为2种: 同步(默认) 异步
    • 1.3 层层嵌套:
  • 02. Promise语法
    • 2.1 调用构造函数 创建Promise实例
    • 2.2 调用Promise实例对象的then/catch方法
    • 2.3 Promise在创建实例时 里面代码会立即执行
  • 03. Promise工作原理
    • 4. Promise对象状态只有两种状态:
    • 5. Promise状态发生改变后 在任何时候都可以获取结果
    • 6. Promise在创建实例时 里面代码会立即执行
  • 04. Promise使用链式语法解决回调地狱
    • 1. 创建Promise实例
    • 2. 取出Promise实例对象结果
    • 3. 取出Promise实例对象的函数结果
    • 4.1 三个实例对象只有url不一样 可封装成函数 帮我们创建Promise实例对象
    • 4.2 调用封装好的Promise实例对象函数
    • 4.3 但打印结果还是随机的 因为只要创建代码就会立即执行
    • 5. Promise是如何解决回调地狱的呢?
  • 05. Promise的all/race方法/语法
    • 1. Promise的all方法 Promise.all
    • 2. Promise的race方法 Promise.race
  • 06. async/await异步函数
    • await语法:
    • 6.1 使用async/await解决回调地狱练习
  • 07. 了解axios底层原理/手写Promise封装xhr
    • 7.1 以前使用的axios
    • 7.2 axios底层原理
    • 7.3 手写Promise源码封装xhr
    • 7.4 使用axios异步函数依次加载-async/await
  • 08. try-catch捕获异常
    • 8.1 try-throw语法
    • 8.2 应用场景
    • 8.3 用于结束forEach(面试题)
    • 8.4 捕捉await的错误信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档