2016-12-23 2 views
0

Je veux faire une longue demande de regroupement. Donc, je veux prendre une demande et envoyer une réponse après un certain délai. C'est possible?Koa 2 routeur comment faire une longue demande d'interrogation

Je suis en train d'utiliser le async/Attendent SYNAX mais il est ne fonctionne pas pour moi (je suis une erreur 404 sur le client)

un grand merci pour toute aide.

Voici mon serveur

import 'babel-polyfill'; 
import Koa from 'koa'; 
import Router from "koa-router"; 

import fs from "fs"; 


const router = new Router(); 

const convert = require('koa-convert') 
const serve = require("koa-static"); 

const app = new Koa(); 


router 
    .get('/*', async function (ctx, next) { 



      ctx.response.type = 'text/html; charset=utf-8'; 

      /* await (() => { 
       setTimeout(() => {ctx.body = fs.readFileSync(__dirname + "/public/index.html")}, 1000) 
      })(); */ 

      //ctx.body = fs.readFileSync(__dirname + "/public/index.html"); 


    }) 

app.use(convert(serve(`${__dirname}/public`))) 
app.use(router.routes()).use(router.allowedMethods()); 

app.listen (3000);

Répondre

3

Généralement, oui. C'est possible.

Le problème dans votre code est que await est entièrement basé sur des promesses. Votre fonction de temporisation doit donc être encapsulée dans une promesse. Quelque chose comme ceci pourrait fonctionner:

... 
function delayed(ctx, ms) { 
    return new Promise((resolve, reject) => { 
     setTimeout(function() { 
      ctx.body = fs.readFileSync(__dirname + "/public/index.html") 
      resolve(); 
     }, ms); 
    }) 
} 

router.get('/*', async function (ctx, next) { 
    ctx.response.type = 'text/html; charset=utf-8'; 
    await delayed(ctx, 1000); 
}) 
... 
+0

Merci Sebastian. – Velidan