【问题标题】:Koa 2 router how to make a long poll requestKoa 2路由器如何发出长轮询请求
【发布时间】:2016-12-23 14:03:49
【问题描述】:

我想提出一个长池请求。所以我想在延迟一段时间后接受请求并发送响应。可能吗?

我正在尝试使用 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());

app.listen(3000);

【问题讨论】:

    标签: long-polling koa2


    【解决方案1】:

    一般来说,是的。这是可能的。

    您的代码中的问题是,await 完全基于承诺。所以你的超时函数需要封装成一个promise。像这样的东西可以工作:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      相关资源
      最近更新 更多