zoukankan      html  css  js  c++  java
  • koa2 controller中实现类似sleep的延迟功能

    今天有同事问我如何在koa2中的controller中使用延迟执行的功能,他直接在controller中使用setTimeout,但是没效果。

    错误的代码类似下面这样:

    1 // 错误的方法
    2 exports.test = async(ctx) => {
    3   setTimeout(async function(){
    4     await ctx.render('home/test.njk');
    5   }, 2000);
    6 };

    问题在于,这里的controller会直接返回,并不会返回给客户端任何信息。因此请求这个接口的路由会返回404。

    要真正做到在controller处理请求时延迟执行某些操作,需要实现一个delay函数,这个函数返回一个Promise,在这个Promise中调用setTimeout,像下面这样:

     1 // 正确的实现
     2 exports.test = async(ctx) => {
     3   async function delay(time) {
     4     return new Promise(function(resolve, reject) {
     5       setTimeout(function(){
     6         resolve();
     7       }, time);
     8     });
     9   };
    10   await delay(2000);
    11   await ctx.render('home/test.njk');
    12 };

    上面代码会在2000毫秒后再渲染模版并返回给客户端。

      

  • 相关阅读:
    matlab中的匹配函数
    查看matlab中的小波基
    图像处理中的彩色图像处理
    OSEK Event mechanism
    OSEK OS Resource management
    ISO17356标准简介[转]
    OSEK OS标准简介(转)
    IQmath的使用方法
    HIVERT高压变频主电路构造原理
    MPPT算法
  • 原文地址:https://www.cnblogs.com/nullcc/p/6433965.html
Copyright © 2011-2022 走看看