JS中的async与await怎么使用
作者:前端老实人 发布时间:2024-05-02 16:19:31
标签:JS,async,await
目录
一、async
二、await:
三、综合应用
一、async
async
创建一个异步函数来定义一个代码块,在其中运行异步代码;
怎样变成异步函数呢?以 async
这个关键字开始,它可以被放置在一个函数前面
async function f() {
return 1;
}
f().then(alert); // 1
//上下结果一样
async function f() {
return Promise.resolve(1);
}
f().then(alert); // 1
//也可以用箭头函数
let hello = async () => { return "1" };
hello().then((value) => console.log(value))
//返回值也可以简化成这样
hello().then(console.log)
异步函数的特征之一:保证函数的返回值为 promise
。
将 async
关键字加到函数申明中,可以告诉它们返回的是 promise
,而不是直接返回值。此外,它避免了同步函数为支持使用 await
带来的任何潜在开销。
二、await:
await
只在异步函数里面才起作用。它可以放在任何异步的,关键字 await
让 JavaScript
引擎等待直到 promise
完成并返回结果。在等待promise
的同时,其他正在等待执行的代码就有机会执行了。
您可以在调用任何返回Promise
的函数时使用 await
,包括Web API
函数。
async function f() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("咚!"), 1000)
});
let result = await promise; // 等待执行,直到 promise resolve 执行完
alert(result); // "咚!"
}
f();//拿到 result 作为结果继续往下执行。所以上面这段代码在1秒后显示 “咚!”。
注意:await 实际上会暂停函数的执行,直到 promise 状态变为 完成,然后以 promise 的结果继续执行。这个行为不会耗费任何 CPU 资源,因为 JavaScript 引擎可以同时处理其他任务:执行其他脚本,处理事件等。
三、综合应用
有了async/await
就去除了到处都是 .then()
代码块,因为await
会等待了。
async function A() {
let response = await fetch('c.jpg');
let myBlob = await response.blob();
let objectURL = URL.createObjectURL(myBlob);
let image = document.createElement('img');
image.src = objectURL;
document.body.appendChild(image);
}
A()
.catch(e => {
console.log('问题: ' + e.message);
});
用更少的.then()
块来封装代码,同时它看起来很像同步代码,所以它非常直观。这样用的很爽!
来源:https://blog.51cto.com/u_15453248/4845084


猜你喜欢
- 有时候会需要通过从保存下来的ckpt文件来观察其保存下来的训练完成的变量值。ckpt文件名列表:(一般是三个文件)xxxxx.ckpt.da
- <html><head>//搜索暂时没做,数据是出来了,但是却没法显示<link rel="styl
- Python2.x使用过程中,中文乱码解决最耳熟能详的方法就是在代码前加上#-*- coding:utf-8 –*-那么为什么需要这么做呢?
- 前言Pandas是python的一个数据分析包,提供了大量的快速便捷处理数据的函数和方法。其中Pandas定义了Series 和 DataF
- 相信大家在学习python编程时绝对离不开数据库的连接,那么我们就用python来连接数据库实现一个简单的图书借阅系统。其实也很简单,就是在
- 一、背景分析对想要在视觉化环境下制作复杂网页的专业网页制作者来说,Dreamweaver已经渐渐在网页编辑工具中展露头角,成为专业人士编写网
- 前段时间冷空气突袭的时候,据说郊区密云的雪积得挺厚,但北京城内除了飘了一点小雪粒,毫无动静。应该是气温过高所致,我在慈云寺桥附近拍下的照片可
- 参考网上的例子,实现了简单的matplotlib pyqt5绘图 相关知识点: (1)pyqt5中添加控件要在布局中添
- 一:mysql官网下载https://dev.mysql.com/downloads/file/?id=494993
- 如下所示://动态删除select中的所有options: function delAllOptions(){&nb
- Python3.5 版本引入了类型提示(Type Hints),它允许开发者在代码中显式地声明变量、函数、方法等的类型信息。这种类型声明不会
- mysql存储过程delimiter $DROP FUNCTION IF EXISTS `fun_convert`$CREATE DEFIN
- cv::Mat 图像格式 (Data Type)命名规则通用的参数命名格式为:CV_{元素比特数}{元素类型}C{通道数}1最常见的 CV_
- 在mysql中查询5条不重复的数据,使用以下:SELECT * FROM `table` ORDER BY RAND() LIMIT 5就可
- 在工作中。在做数据集时,需要对图片进行处理,照相的图片我们只需要特定的部分,所以就想到裁剪一种所需的部分。当然若是图片有规律可循则使用ope
- 本文实例为大家分享了FormData上传多个文件的具体代码,供大家参考,具体内容如下由于项目中使用到,特此写个Demohtml代码:<
- 1、TCP连接的建立方法客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较。步骤TCP客户端TCP服务器
- 本文实例讲述了Python连接phoenix的方法。分享给大家供大家参考,具体如下:phoenix是由saleforce.com开源的一个项
- 一、需求分析最近同事用网上提供扫描软件进行扫描识别文字,每天上线只能够做两次扫描,请求我研发一个小工具帮助解决识别图片的中文字。二、方案选择
- 摸到她了!青翠的衣衫,奶白的肌肤,捧在手上的感觉真是太好了,心里美滋滋的。《悟透JavaScript》,一本偶然之作,终于成书并出版了。本书