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毫秒后再渲染模版並返回給客戶端。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM