为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第1天 前端工程师2022版

标签:
JavaScript

课程名称: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一起使用

伪代码:

https://img2.sycdn.imooc.com/63161a010001504e05350110.jpg

③为什么用

使异步(Promise)操作更简洁、更方便

使异步代码看起来像同步的,更容易理解

2 、使用 async/await

(实现一个效果:打开一个网站,弹出广告,隔几秒消失,再隔几秒弹出,又隔几秒消失……)

实现方式:通过操作 classname 让它显示和隐藏,显示就把这个class移除,隐藏就加上

classList获取的是元素的class值,none就是其中一个值,并设置了隐藏的样式

https://img2.sycdn.imooc.com/63161a300001a65609610274.jpg

当class中有none类的时候,元素会隐藏;class中移除none类的时候,元素默认显示

https://img1.sycdn.imooc.com/63161a550001bb3d06190311.jpg

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 ,给以后的学习打下了基础。期待后面的学习


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消