Роутер Koa 2 как сделать длинный запрос опроса

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

Я пытаюсь использовать синтаксис async/await, но он у меня не работает (я получил ошибку 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());

приложение.слушай(3000);


person Velidan    schedule 23.12.2016    source источник


Ответы (1)


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

Проблема в вашем коде в том, что 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);
})
...
person Sebastian Hildebrandt    schedule 10.03.2017