【九月打卡】第1天 前端工程师2022版
课程名称:async await 基础知识
课程章节:认识 async 和 await 、使用 async 和 await
课程讲师: Alex
课程内容:
async/await 基础知识
1、 认识 async、await
①是什么
async await 是ES2017 新增的两个关键字
②有什么用
async 翻译过来就是 异步
可以声明一个 async 函数,表示函数里有异步操作。如何做?
首先我们有一个普通函数
function fn() {}我们在这个普通函数的前面加上一个 async 用空格隔开
async function fn() {}现在,fn 就由一个普通函数变为一个 async/异步 函数
那么,到底 async 函数有什么用?
async await 一般是连起来用的,所以async 主要就是给await 提供一个场所
await 异步等待
表示等待一个异步操作
表示紧跟在await后面的是异步的,需要等待结果
await需要和async一起使用
伪代码:
③为什么用
使异步(Promise)操作更简洁、更方便
使异步代码看起来像同步的,更容易理解
2 、使用 async/await
(实现一个效果:打开一个网站,弹出广告,隔几秒消失,再隔几秒弹出,又隔几秒消失……)
实现方式:通过操作 classname 让它显示和隐藏,显示就把这个class移除,隐藏就加上
classList获取的是元素的class值,none就是其中一个值,并设置了隐藏的样式
当class中有none类的时候,元素会隐藏;class中移除none类的时候,元素默认显示
demo:
<style>
.ad{
display: block;
width: 300px;
height: 150px;
margin: 0 auto;
}
.none{
display: none;
}
</style><img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="/ad.jpg" alt="前端体系课" class="ad none" id="ad">
这里用三种方式实现:
①普通函数
function ad() {
const adDom = document.getElementById('ad');
setTimeout( ()=> {
// 显示
adDom.classList.remove('none');
setTimeout(() => {
// 隐藏
adDom.classList.add('none')
//setTimeout
},2000)
},1000)
}
ad();普通函数的问题已经出来了,如果我接下来再隔2秒需要隐藏,那么我需要在里面再开一个定时器,这样层层嵌套,就出现了回调地狱的问题
② promise函数
// 先写一个等待函数
function wait(ms){
return new Promise(resolve => {
setTimeout(resolve,ms);
});
}
function ad() {
const adDom = document.getElementById('ad');
wait(1000).then( () => {
// 显示
adDom.classList.remove('none');
return wait(2000);
}).then(() => {
// 隐藏
adDom.classList.add('none');
return wait(1000);
}).then( () => {
// 显示
adDom.classList.remove('none');
return wait(2000);
}).then(() => {
// 隐藏
adDom.classList.add('none');
})
}
ad();解决了回调地狱问题,将纵向发展的代码展开成横向的
虽然有进步,但是还是很麻烦
③ async/await 函数
// 先写一个等待函数
function wait(ms){
return new Promise(resolve => {
setTimeout(resolve,ms);
});
}
async function ad() {
const adDom = document.getElementById('ad');
await wait(1000);
// 显示
adDom.classList.remove('none');
await wait(2000);
// 隐藏
adDom.classList.add('none');
await wait(1000);
// 显示
adDom.classList.remove('none');
await wait(2000);
// 隐藏
adDom.classList.add('none');
}
ad();由此可以看出,我们用 async/await 函数写出来的代码更简洁、方便,而且它看起来像同步代码
课程收获:
老师讲的非常细致,通俗易懂。这一节学的是 async/await 基础知识,通过学习我了解了什么是 async/await ,以及 async/await 有什么用、为什么用 async/await ,给以后的学习打下了基础。期待后面的学习
共同学习,写下你的评论
评论加载中...
作者其他优质文章


