不管是使用koa仍是node,咱们都会遇到大量都异步处理,在以前咱们处理异步都方法是使用回调函数,但是那样既不美观也很很不容易后期维护。因而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对象返回的值。咱们来试试node
async_result.then((res) => {
console.log(res)
})
复制代码
I am a asyncSync result
复制代码
await必须配合async使用,顾名思义,是async wait (等待异步)的意思。es6
// 定义一个睡觉函数
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
复制代码
结果promise
// 打印结果也是3000ms
3000ms
复制代码
await通常在等待async方法执行完毕,可是其实await等待的只是一个表达式,这个表达式在官方文档里说的是Promise对象,但是它也能够接受普通值。bash
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()
复制代码
结果session
cost 1 ms
cost 3002 ms
cost 1 ms
复制代码
欢迎指出不足,我会补充上去,还在持续更新。记录学习过程。koa
小强前端交流群QQ群:724179055异步
定时分析技术和资料,欢迎你们进来一块儿交流。async
往期回顾地址:函数