• koa2 使用 async 、await、promise解决异步的问题


    koa代码编写上避免了多层的嵌套异步函数调用 async await来解决异步
    - async await 需要依赖于promise

     三主角: __函数前面 async, 内部才能await,要想await能有用,就用promise包裹他__
    

      1._函数前面 async

    app.use(async (ctx)=>{
            if(ctx.url==='/') {
              let  data=await  asyncReadFile();
              ctx.body=data;
              // 设置响应头
              ctx.set('content-type','text/html;charset=utf-8');  //content-type: text/html;charset=utf-8
            } else {
                 ctx.body='ok';
            }
        });

    2.内部才能await

    let  data=await  asyncReadFile();

    3. 返回一个Promise 对象(包含两个参数)

    function asyncReadFile() {
       return new Promise(function(resolve,reject) {
          fs.readFile('./index.html',(err,data)=>{
            // 1:失败,err  2:成功需要data
              if(err) {
                 reject(err);
                 return;
              }
              // 成功
              resolve(data);
          });
       });
    }

    网整例子:

    app.js

    const  fs   = require('fs');
    const  koa  = require('koa');
    let  app=new  koa();
    function asyncReadFile() {
       return new Promise(function(resolve,reject) {
          fs.readFile('./index.html',(err,data)=>{
            // 1:失败,err  2:成功需要data
              if(err) {
                 reject(err);
                 return;
              }
              // 成功
              resolve(data);
          });
       });
    }
    
    
    app.use(async (ctx)=>{
            if(ctx.url==='/') {
              let  data=await  asyncReadFile();
              ctx.body=data;
              // 设置响应头
              ctx.set('content-type','text/html;charset=utf-8');  //content-type: text/html;charset=utf-8
            } else {
                 ctx.body='ok';
            }
        });
    
    app.listen(1000);

    html

    <!DOCTYPE html>
    <html lang="en" dir="ltr">
      <head>
        <meta charset="utf-8">
        <title></title>
      </head>
      <body>
        <h1>hell  world</h1>
      </body>
    </html>

    效果:

  • 相关阅读:
    8.使用背景图,制作雪碧图效果
    7.使用定位制作轮播图样式
    6.使用定位,制作弹出框界面
    App 抓包代理设置
    Cypress 自动化环境搭建
    Android APP 性能测试之 GT 工具
    接口测试流程
    接口结构内容
    接口定义
    网络七层协议
  • 原文地址:https://www.cnblogs.com/guangzhou11/p/10174349.html
Copyright © 2020-2023  润新知