您现在的位置是:亿华云 > 数据库
如何讲清楚async和await?
亿华云2025-10-04 03:49:59【数据库】0人已围观
简介如何讲清楚async和await? 承接上一篇文章Eric:如何讲清楚Promise?async和await要搭配Promise使用, 它进一步极大的改进了Promise
如何讲清楚async和await?何讲c和
承接上一篇文章
Eric:如何讲清楚Promise?
async和await要搭配Promise使用, 它进一步极大的改进了Promise的写法
来看一个简单的场景:
//假设有4个异步方法要按顺序调用
new Promise(function(resolve){
ajaxA("xxxx", ()=> { resolve(); })
}).then(function(){
return new Promise(function(resolve){
ajaxB("xxxx", ()=> { resolve(); })
})
}).then(function(){
return new Promise(function(resolve){
ajaxC("xxxx", ()=> { resolve(); })
})
}).then(function(){
ajaxD("xxxx");
});语法上不够简洁, 我们可以稍微改造一下
//将请求改造成一个通用函数
function request(options) {
//.....
return new Promise(....); //使用Promise执行请求,并返回Promise对象
}
//于是我们就可以来发送请求了
request("http://xxxxxx")
.then((data)=>{
//处理data
})然后我们再来重新改造开头的代码
request("ajaxA")
.then((data)=>{
//处理data
return request("ajaxB")
})
.then((data)=>{
//处理data
return request("ajaxC")
})
.then((data)=>{
//处理data
return request("ajaxD")
})比起之前有了不小的进步, 但是看上去依然不够简洁
如果我能像使用同步代码那样, 使用Promise就好了
于是, async \ await出现了
async function load(){
await request("ajaxA");
await request("ajaxB");
await request("ajaxC");
await request("ajaxD");
}await关键字使用的要求非常简单, 后面调用的函数要返回一个Promise对象
load()这个函数已经不再是普通函数, 它出现了await这样"阻塞式"的操作
因此async关键字在这是云南idc服务商不能省略的
那么现在看, 这段代码变得异常 清秀
代码的编写顺序
代码的阅读顺序
代码的执行顺序
全部都是按照同步的习惯来的
是不是很方便.
到这你已经学会了async和await基本使用方式
下面来简单解释一下它的工作流程
//wait这个单词是等待的云服务器意思
async function load(){
await request("ajaxA"); //那么这里就是在等待ajaxA请求的完成
await request("ajaxB");
await request("ajaxC");
await request("ajaxD");
}如果后一个请求需要前一个请求的结果怎么办呢?
传统的写法是这样的
request("ajaxA")
.then((data1)=>{
return request("ajaxB", data1);
})
.then((data2)=>{
return request("ajaxC", data2)
})
.then((data3)=>{
return request("ajaxD", data3)
})而使用async/await是这样的
async function load(){
let data1 = await request("ajaxA");
let data2 = await request("ajaxB", data1);
let data3 = await request("ajaxC", data2);
let data4 = await request("ajaxD", data3);
//await不仅等待Promise完成, 而且还拿到了resolve方法的参数
}注意当一个函数被async修饰以后, 它的返回值会被自动处理成Promise对象
关于异常处理
async function load(){
//请求失败后的处理, 可以使用try-catch来进行
try{
let data1 = await request("ajaxA");
let data2 = await request("ajaxB", data1);
let data3 = await request("ajaxC", data2);
} catch(e){
//......
}
}
"很赞哦!(2361)
相关文章
- 顶级域名可以增加企业品牌的价值。随着经济的快速发展,域名已不再是企业在网络中的独立地位。顶级域名的服务范围、企业产品、综合形象体现等,对于企业单位来说,顶级域名的重要性不言而喻。
- 浅析数据结构栈和队列的相互实现
- VS Code Java 11 月更新,来啦!
- 如何部署Jupyter Notebook用于交互式Python开发?
- 为什么喜欢国外注册域名?国外注册域名注意什么?
- 你是否有一个梦想?用JavaScript开发一款自定义配置视频播放器
- GitHub率先消灭了cookies:与烦人的用户条款说再见
- 一文详解 Nacos 高可用特性
- 审核通过的域名将显示在域名竞拍页面,并进入正式拍卖期,买家可以在拍卖周期内出价,加价幅度与拍卖保证金说明,点此查看。
- 实现SSO单点登录的思考
热门文章
站长推荐
尽量不要在域名中出现特殊字符,这样的域名很容易导致访问者输入错误,同时给人留下不专业的印象,降低网站的可信度,并流失大量潜在客户。
一篇文章带你了解SVG 剪切路径
创建逼真的全身3D人像只需20分钟,平价的手机端方案
桃李春风一杯酒,江湖夜雨十年灯 - 老兵夜话DPDK
当投资者经过第二阶段的认真学习之后又充满了信心,认为自己可以在市场上叱咤风云地大干一场了。但没想到“看花容易绣花难”,由于对理论知识不会灵活运用.从而失去灵活应变的本能,就经常会出现小赢大亏的局面,结果往往仍以失败告终。这使投资者很是困惑和痛苦,不知该如何办,甚至开始怀疑这个市场是不是不适合自己。在这种情况下,有的人选择了放弃,但有的意志坚定者则决定做最后的尝试。
什么是微内核架构设计?
一篇文章带你解锁Python库中操作系统级别模块Psutil
2020征文-手机零基础鸿蒙开发2第一个世界版Hello World