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().getTimelet data = endTime - startTimeresolve(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()// 子路由1home.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())
