Koa2学习(二)async/await
Koa2学习(二)async/await
koa2中用到了大量的async/await语法,要学习koa2框架,首先要好好理解async/await语法。
async/await顾名思义是一个异步等待的语法,是es7中为了实现用同步的方式写异步方法的一种新式语法。
async
我们再来看看async到底是一个什么语法:
普通的方法:
function syncF() {
return 'I am a sync result'
}
let sync_result = syncF()
console.log(sync_result)
结果:
I am a sync result
同步方法立即返回结果,大家都懂,就不解释了。
async的方法:
async语法 是 一个加持在函数定义时的声明:
async function asyncF() {
return 'I am a async result'
}
let async_result = asyncF()
console.log(async_result)
结果:
Promise { 'I am a asyncSync result' }
我们看到执行async的函数时,返回的是一个promise对象,既然是promise对象, 那就好理解了。
promise对象肯定会有一个then方法,用于处理异步结果,我们来试试:
async_result.then((res) => {
console.log(res)
})
结果:
I am a asyncSync result
promise执行的结果会在then里面返回,没有问题。
await
await必须结合async来使用,顾名思义,是async wait (等待异步)的意思。
// 定义一个耗时3秒返回结果的函数
function delayF() {
return new Promise(resolve => {
setTimeout(() => {
resolve('I am a async result')
}, 3000)
})
}
// 定义一个async函数
async function testAwait() {
let start = Date.now()
console.log(await delayF())
console.log(`cost ${Date.now() - start} ms`)
}
testAwait()
结果:
I am a async result
cost 3002 ms
await一般在等待async方法执行完毕,但是其实await等待的只是一个表达式,这个表达式在官方文档里说的是Promise对象,可是它也可以接受普通值。
async function testAsync() {
return 'testAsync'
}
async function testAwait2() {
let time1 = Date.now()
await '1233'
let time2 = Date.now()
console.log(`cost ${time2 - time1} ms`)
await delayF()
let time3 = Date.now()
console.log(`cost ${time3 - time2} ms`)
await testAsync()
let time4 = Date.now()
console.log(`cost ${time4 - time3} ms`)
}
testAwait2()
结果:
cost 1 ms
cost 3002 ms
cost 1 ms
总结
- async是声明一个异步的函数,返回一个promise对象。
- await是等待一个表达式(promise)的返回值执行完毕,必须结合async使用。
- 写在await后面的方法都会等待await中的异步方法执行完毕之后再执行。
Koa2学习(二)async/await的更多相关文章
- JS学习- ES6 async await使用
async 函数是什么?一句话,它就是 Generator 函数的语法糖. 使用场景常常会遇到,请求完一个接口,拿完值再去请求另外一个接口,我们之前回调callback函数处理,如果很多的情况下,看起 ...
- js异步回调Async/Await与Promise区别 新学习使用Async/Await
Promise,我们了解到promise是ES6为解决异步回调而生,避免出现这种回调地狱,那么为何又需要Async/Await呢?你是不是和我一样对Async/Await感兴趣以及想知道如何使用,下面 ...
- ES6-11学习笔记--async,await
基于Generator异步编程语法糖:async await async默认输出Promise对象 将异步的代码以同步的方式书写,提高代码可阅读性 基本使用: function timeout() ...
- koa2学习(二) 中间件router
中间件 koa-router 安装 npm install --save koa-router 使用 const Koa = require('koa'); const Router = requir ...
- Async/Await是这样简化JavaScript代码的
译者按: 在Async/Await替代Promise的6个理由中,我们比较了两种不同的异步编程方法:Async/Await和Promise,这篇博客将通过示例代码介绍Async/Await是如何简化J ...
- 多线程编程学习笔记——async和await(二)
接上文 多线程编程学习笔记——async和await(一) 三. 对连续的异步任务使用await操作符 本示例学习如何阅读有多个await方法方法时,程序的实际流程是怎么样的,理解await的异步 ...
- C#线程学习笔记九:async & await入门二
一.异步方法返回类型 只能返回3种类型(void.Task和Task<T>). 1.1.void返回类型:调用方法执行异步方法,但又不需要做进一步的交互. class Program { ...
- 多线程编程学习笔记——async和await(三)
接上文 多线程编程学习笔记——async和await(一) 接上文 多线程编程学习笔记——async和await(二) 五. 处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...
- C# async await 学习笔记2
C# async await 学习笔记1(http://www.cnblogs.com/siso/p/3691059.html) 提到了ThreadId是一样的,突然想到在WinForm中,非UI线程 ...
随机推荐
- ActiveMQ windows安装
下载ActiveMQ 官方网站:http://activemq.apache.org/ 下载,解压缩 以前台安装 ctiveMQ默认使用的TCP连接端口是61616, 通过查看该端口的信息可以测试Ac ...
- 跟初学者学习IbatisNet第三篇
这一章我们主要介绍一下IbatisNet里面的动态sql语句的运用,比如有时候我们想进行模糊查询,参数是动态加入的.或者要实现top n ,order by ,分页等功能的时候,我们就不得不用动态拼接 ...
- 理解js的几个关键问题(1):全局变量new和关于hasOwnPropery和PropertyIsEnumerable 等
一.作用域和全局变量 var test=function(){ var a=1; setTimeout(function(){ console.log(a); a=2; },1000); a=3; s ...
- java中String数组和List的互相转化
1.List转String数组 方法一: //先准备一个List List<String> testList=new ArrayList<>(); testList.add(& ...
- BootStrap学习01框架搭建
中文文档:https://v3.bootcss.com/css/ 开发工具 WebStorm 一.新建项目08bootstrap 引入bootstrap-3.3.7,引入jQuery,引入holder ...
- sqlserver复制表数据到另一个表
SQL Server中,如果目标表存在: insert into 目标表 select * from 原表; SQL Server中,,如果目标表不存在: select * into 目标表 from ...
- python模块以及导入出现ImportError: No module named ‘xxx‘问题
python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包.只要模块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用如果你要使 ...
- poj3207:Ikki's Story IV-Panda's Trick【2-sat tarjan】
题目大意:圆盘上顺次安放0, 1, 2, …, n – 1的点,每次给出两个点需要连边,可以选择在圆盘的正面连边或在圆盘的反面连边,问是否存在一种方案使得所有连线不相交? 思路:本问题可以等价成:圆盘 ...
- COdevs 1251 括号
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 计算乘法时,我们可以添加括号,来改变相乘的顺序,比如计算X1, X2, X3, X4 ...
- Codeforces Round #296 (Div. 2) D. Clique Problem [ 贪心 ]
传送门 D. Clique Problem time limit per test 2 seconds memory limit per test 256 megabytes input standa ...