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毫秒后再渲染模版并返回给客户端。

      

  • 相关阅读:
    java-多态
    java-继承
    java-访问修饰符
    mysql基础入门
    子查询
    多表查询
    mysql表(多对多)
    myslql主外键约束
    Sql语句分类
    Redis的一些介绍
  • 原文地址:https://www.cnblogs.com/nullcc/p/6433965.html
Copyright © 2011-2022 走看看