2016-12-23 24 views
0

Я хочу сделать длинный запрос на объединение. Поэтому я хочу принять запрос и отправить ответ после некоторой задержки. Является ли это возможным?Koa 2 router как сделать запрос на длительный опрос

Я пытаюсь использовать асинхронной/Await synax, но это не работает для меня (я получил ошибку 404 на клиенте)

большое спасибо за любую помощь.

Вот мой сервер

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);

ответ

3

Как правило, да. Это возможно.

Проблема в вашем коде заключается в том, что await находится на основе обещаний. Таким образом, ваша функция тайм-аута должна быть заключена в обещание. Что-то вроде этого могло бы работать:

... 
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

Спасибо Себастьян. – Velidan

 Смежные вопросы

  • Нет связанных вопросов^_^