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>

    效果:

  • 相关阅读:
    Python 模块 itertools
    Python 字符串的encode与decode
    python 模块 hashlib(提供多个不同的加密算法)
    暴力尝试安卓gesture.key
    hdu 1300 Pearls(DP)
    hdu 1232 畅通工程(并查集)
    hdu 1856 More is better(并查集)
    hdu 1198 Farm Irrigation(并查集)
    hdu 3635 Dragon Balls(并查集)
    hdu 3038 How Many Answers Are Wrong(并查集)
  • 原文地址:https://www.cnblogs.com/guangzhou11/p/10174349.html
Copyright © 2011-2022 走看看