博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
koa2学习笔记(三)async/await
阅读量:5771 次
发布时间:2019-06-18

本文共 1555 字,大约阅读时间需要 5 分钟。

async

无论是使用koa还是node,我们都会遇到大量都异步处理,在之前我们处理异步都方法是使用回调函数,可是那样既不美观也很很不容易后期维护。于是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' }复制代码

这里返回的是一个promise对象,这是es6里面的类型,在promise对象里面有一个then方法,在then方法里面我们可以拿到promise对象返回的值。我们来试试

async_result.then((res) => {    console.log(res)})复制代码
I am a asyncSync result复制代码

await

await必须配合async使用,顾名思义,是async wait (等待异步)的意思。

// 定义一个睡觉函数function sleep(ms){    return new Promise((resolve,reject)=>{        setTimeout((ms)=>{            resolve('睡觉了'+ms+'ms')        },ms)    })}// 定义一个async函数async sleeptime(ms)=>{    const start = Date.now() //开始时间    await sleep(ms)    const end = Date.now()    console.log(end-start+'ms')}sleeptime(3000)  //睡觉3000ms复制代码

结果

// 打印结果也是3000ms3000ms复制代码

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 mscost 3002 mscost 1 ms复制代码

总结

  • async是声明一个异步的函数,返回一个promise对象。
  • await是等待一个表达式(promise)的返回值执行完毕,必须结合async使用。
  • 写在await后面的方法都会等待await中的异步方法执行完毕之后再执行。

最后

欢迎指出不足,我会补充上去,还在持续更新。记录学习过程。

小强前端交流群QQ群:724179055

定时分析技术和资料,欢迎大家进来一起交流。

往期回顾地址:

转载地址:http://dupux.baihongyu.com/

你可能感兴趣的文章
galera mysql 多主复制启动顺序及命令
查看>>
JS prototype 属性
查看>>
中位数性质——数列各个数到中位数的距离和最小
查看>>
WebApp之Meta标签
查看>>
添加Java文档注释
查看>>
Python3批量爬取网页图片
查看>>
iphone-common-codes-ccteam源代码 CCEncoding.m
查看>>
微信公众平台开发(96) 多个功能整合
查看>>
[转]MVC4项目中验证用户登录一个特性就搞定
查看>>
用Perl编写Apache模块续二 - SVN动态鉴权实现SVNAuth 禅道版
查看>>
Android 阴影,圆形的Button
查看>>
C++概述
查看>>
卡特兰数
查看>>
006_mac osx 应用跨屏幕
查看>>
nginx中配置文件的讲解
查看>>
MindNode使用
查看>>
SQL Server 2016 Alwayson新增功能
查看>>
HTTP库Axios
查看>>
CentOS7下安装python-pip
查看>>
认知计算 Cognitive Computing
查看>>