async
async 加在函数(普通同步函数)之前,将函数变成异步,函数返回promise对象。
原来函数的返回值将在新的promise then里面的参数中出现。
await
异步编程使用
https://developer.mozilla.org/zh-CN/docs/learn/JavaScript/%E5%BC%82%E6%AD%A5/Async_await
放在promise之前。阻塞当前代码,直到拿到结果
fetch('coffee.jpg')
.then(response => response.blob())
转化
let response = await fetch('coffee.jpg');
让“异步”变成“同步”
例子demo
function getSynTime(){
return new Promise((resolve, reject)=>{
try{
let startTime = new Date().getTime()
setTimeout(()=>{
let endTime = new Date().getTime
let data = endTime - startTime
resolve(data)
}, 500)
}catch(err){
reject(err)
}
})
}
async function getSyncData(){
let time = await getSynTime()
let data = `endTime - startTime=${time}`
return data
}
async function getData(){
let time = await getSyncData()
console.log( time )
}
getSyncData 如果不加async会报错
koa-router
const app = new Koa()
const Router = require('koa-router')
let home = new Router()
// 子路由1
home.get('/', async ( ctx )=>{
let html = `
<ul>
<li><a href="/page/helloworld">/page/helloworld</a></li>
<li><a href="/page/404">/page/404</a></li>
</ul>
`
ctx.body = html
})
// 装载所有子路由
let router = new Router()
router.use('/', home.routes(), home.allowedMethods())
router.use('/page', page.routes(), page.allowedMethods())
// 加载路由中间件
app.use(router.routes()).use(router.allowedMethods())