zoukankan      html  css  js  c++  java
  • 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>

    效果:

  • 相关阅读:
    Add two numbers
    House Robber && House Robber II
    Clone Graph
    224. Basic Calculator
    29. Divide Two Integers
    365. Water and Jug Problem
    435. Non-overlapping Intervals
    452. Minimum Number of Arrows to Burst Balloons
    138. Copy List with Random Pointer
    43. Multiply Strings
  • 原文地址:https://www.cnblogs.com/guangzhou11/p/10174349.html
Copyright © 2011-2022 走看看