async

async 加在函数(普通同步函数)之前,将函数变成异步,函数返回promise对象。
原来函数的返回值将在新的promise then里面的参数中出现。

await

异步编程使用
https://developer.mozilla.org/zh-CN/docs/learn/JavaScript/%E5%BC%82%E6%AD%A5/Async_await
放在promise之前。阻塞当前代码,直到拿到结果

  1. fetch('coffee.jpg')
  2. .then(response => response.blob())

转化

  1. let response = await fetch('coffee.jpg');

让“异步”变成“同步”

例子demo

  1. function getSynTime(){
  2. return new Promise((resolve, reject)=>{
  3. try{
  4. let startTime = new Date().getTime()
  5. setTimeout(()=>{
  6. let endTime = new Date().getTime
  7. let data = endTime - startTime
  8. resolve(data)
  9. }, 500)
  10. }catch(err){
  11. reject(err)
  12. }
  13. })
  14. }
  15. async function getSyncData(){
  16. let time = await getSynTime()
  17. let data = `endTime - startTime=${time}`
  18. return data
  19. }
  20. async function getData(){
  21. let time = await getSyncData()
  22. console.log( time )
  23. }

getSyncData 如果不加async会报错

koa-router

  1. const app = new Koa()
  2. const Router = require('koa-router')
  3. let home = new Router()
  4. // 子路由1
  5. home.get('/', async ( ctx )=>{
  6. let html = `
  7. <ul>
  8. <li><a href="/page/helloworld">/page/helloworld</a></li>
  9. <li><a href="/page/404">/page/404</a></li>
  10. </ul>
  11. `
  12. ctx.body = html
  13. })
  14. // 装载所有子路由
  15. let router = new Router()
  16. router.use('/', home.routes(), home.allowedMethods())
  17. router.use('/page', page.routes(), page.allowedMethods())
  18. // 加载路由中间件
  19. app.use(router.routes()).use(router.allowedMethods())