Async/Await 的个人见解

正文:

async,顾名思义,一个异步执行的功能,而 await 则是配合 async 使用的另一个关键字,也是闻字识其意,就是叫你等待啦!

二者配合食用效果更佳哦,就像德芙配巧克力 ⊙_⊙||

现在其实有点意识的前端或者JS学习者基本都学习了ES6语法了,但是依旧感觉在编写异步代码上不够爽怎么办,在 ES7 的 async/await 则能使得我们在编写异步代码时变得像同步一样的方式来编写,这样子可以帮助我们更直观的阅读我们的额代码而不必在一堆代码中去寻找这个异步的请求代码了,我们将异步执行的代码封装了或者作为模块导入即可。这样做不仅可以帮助我们的代码提高可阅读性,采用模块引入的方式也更利于我们代码的后期维护。

async/await 出来其实很早了,15年时就有许多人在社区中开始推广了,但是为什么我今天才学习了?没法用啊!,之前想要用个新特性要折腾多少事!精力不足啊我们这种小程序员,又不是哪些大牛们三下五除二解决了工作问题,时间与精力都比我们多啊。

废话这么多!好啦,不废话了,下面是我在互联网上看过对于 async/await 的介绍后自己的总结:

首先,从别人那得来的 async/await 规则:

  1. async 表示这是一个 async 函数,而 await 只能在这个函数里面使用。

  2. await 表示在这里等待 await 后面的操作执行完毕,再执行下一句代码。

  3. await 后面紧跟着的最好是一个耗时的操作或者是一个异步操作(当然非耗时的操作也可以的,但是就失去意义了)。

其实在使用 async/await 的时候最简单的场景就是当你需要执行一个耗时操作时或者必须为异步操作时就可以直接上,使用 async 来执行你的函数,在这个函数内部 使用 await 关键字来达到异步执行的最终目的:执行完毕(异步执行)了,可以运行下一行代码了!

这个时候 JS 代码就会向下一行进军了!一个简单的案例:

 let sleep = function (time) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve();
}, time);
})
}; let howLongToSleep = async function () {
// 在这里使用起来就像同步代码那样直观
console.time();
console.log('start');
await sleep(3000); //sleep 为一个执行需要耗费 3s 的函数
console.timeEnd('end');
}; howLongToSleep();

这里你会发现先是打印出了 start 然后过了约 3s 的时候打印出了 end: 1496124446501.106ms

而在这里也可以直接拿到异步函数的返回值,例如上面的 howLongToSleep 函数中的 await sleep(3000) 可以直接获取到 sleep函数的返回值,直接用个变来那个保存即可使用了,也很方便的吧。

 // 在 await 前面用变量保存即可;
let result = await sleep(3000);

这里会等待 sleep 函数完成后并将返回值返回后 await 的工作才算完成,这时候才会把的到的返回值赋值给 result 变量,而不是将函数体给了 result, 这点需要清楚。

如果你需要调用多个异步函数并且每隔指定时间执行其中一个的话不妨讲他们放到一个数组中执行:

let fnArr = [firstFn, secondFn, thirdFn];  // 数组中存放着需要顺序执行的函数

for(let v of fnArr ) {
console.log(`当前是${v}函数开始执行...`);
await v( params ); // 调用数组中的每个函数
}

不过,现在这些功能基本都还只在 node 中才能见到,浏览器端对于这些 ES6、ES7 的功能实现还是存在很大的兼容性问题,使用 babel 倒是可以实现大部分的代码功能,但是对于很多前端工作者来说事件比较麻烦的事,但是请坚信总有一天你会来浏览器端不需要 babel 也能爽的,所以先会了不坏,正所谓技多不压身嘛,如果你在学习 node 或者正准备学习 node 的话,请务必会!

结语:

以前不写博客的,都是看别人博客,学着写博客没有多久,有什么问题欢迎各位大佬们穿着女装来批评在下!本人一定虚心受教;

另外,如果发现本人的发表的博客有抄袭现象,请直接开骂!不要留情,我会在第一时间修改或者删除的,绝对不污染各位大佬的视野。

ES7的Async/Await的简单理解的更多相关文章

  1. Promise, Generator, async/await的渐进理解

    作为前端开发者的伙伴们,肯定对Promise,Generator,async/await非常熟悉不过了.Promise绝对是烂记于心,而async/await却让使大伙们感觉到爽(原来异步可以这么简单 ...

  2. Promise 和async/await 的使用理解

    Promise 和async/await 的使用理解 1. new Promise时就会开始执行语句. new Promise(resolve => resolove('成功信息') )     ...

  3. async/await的实质理解

    async/await关键字能帮助开发者更容易地编写异步代码.但不少开发者对于这两个关键字的使用比较困惑,不知道该怎么使用.本文就async/await的实质作简单描述,以便大家能更清楚理解. 一.a ...

  4. 体验异步的终极解决方案-ES7的Async/Await

    阅读本文前,期待您对promise和ES6(ECMA2015)有所了解,会更容易理解.本文以体验为主,不会深入说明,结尾有详细的文章引用. 第一个例子 Async/Await应该是目前最简单的异步方案 ...

  5. .Net异步关键字async/await的最终理解

    由于之前的项目中自己突然想试试异步action,于是使用了一下,突然就对异步action的执行流程以及原理及其好处产生了兴趣,再参考了一些文章之后,就做了下归类. 我们可以不需要太深入的理解底层,但是 ...

  6. ES7 之 Async/await 的使用

    在 js 异步请求数据时,通常,我们多采用回调函数的方式解决,但是,如果有多个回调函数嵌套时,代码显得很不优雅,维护成本也相应较高. ES6 提供的 Promise 方法和 ES7 提供的 Async ...

  7. C#Async,await异步简单介绍

    C# 5.0 引入了async/await,.net framework4.5开始支持该用法 使用: 由async标识的方法必须带有await,如果不带await,方法将被同步执行 static vo ...

  8. C#中await和async关键字的简单理解

    C# 5.0之后,为了简化异步编程,引入了异步函数的概念,也就是方法标记async,然后可以使用await表达式来等待异步操作返回. await关键字看起来是一个阻塞线程的调用,但是实际上执行到awa ...

  9. .Net 4.5 的async 和await 的简单理解使用

    原文地址:http://www.cnblogs.com/HJL-Blog/p/4432632.html 所谓的异步编程是利用CPU空闲时间和多核的特性,它所返回的Task或Task<TResul ...

随机推荐

  1. APP设计规范

    设计师DPI指南 本指南旨在为初级到中级设计人员提供“入门”或介绍性阅读,他们希望从一开始就学习或获得有关跨DPI和跨平台设计的更多知识. 尽可能少的数学和没有不可解析的图形,只需在简短的部分中订购直 ...

  2. clojure with postgres

    主要关注访问pg.不关心其他db 1 clojure.java.jdbc https://github.com/clojure/java.jdbc http://clojure-doc.org/art ...

  3. php版 日文半角转全角

    工作需要,写的这个 /* *转载请注明 http://www.cnblogs.com/kclteam/p/5278923.html$str //参数可以是字符串或数组*/ function HkToF ...

  4. 删除Ati显卡桌面右键菜单(配置可交换显卡,显示卡属性,图形选项,图形属性)

    Win+R 打开注册表 依次找到 HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers 保留Gadgets.New.Sh ...

  5. 江西财经大学第一届程序设计竞赛 G

    链接:https://www.nowcoder.com/acm/contest/115/G来源:牛客网 题目描述 周末,小Q喜欢在PU口袋校园上参加各种活动刷绩点,体验丰富多彩的大学生活. 但是每个活 ...

  6. 查询linux服务器有哪些IP在连接

    查询linux服务器有哪些IP在连接 netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n 查看linux的 ...

  7. DJ

    必知必会13条 all():查询所有结果 filter(**kwargs)   过滤,取到符合条件的对象,比get方法好,找不到会返回空 get(**kwargs)      取到符合条件对象,对象有 ...

  8. Problem05 判断分数等级

    题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示. 程序分析:(a>b)?a:b这是条件运算符的基本例子. impo ...

  9. 一些自己编写的简单的js

    图片在窗口内弹来弹去的效果 <div class="FrontAdv_float01-default" style="position: absolute;z-in ...

  10. python数据库的增删改查

    #coding=utf- from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlal ...