gpt4 book ai didi

node.js - 如何使用 koa 生成缓慢的响应?

转载 作者:太空宇宙 更新时间:2023-11-04 00:00:32 27 4
gpt4 key购买 nike

运行 koa 时,我收到以下警告:

deprecated Support for generators will be removed in v3

我的代码所做的是创建缓慢的响应。例如。每 1 秒写入一次响应,持续 30 秒。

(new Koa()).use(function *(){
const tr = through();
setInterval(() => tr.write('blabla\n'), 1000);
setTimeout(tr.end, 30000);
this.type = 'text';
this.body = tr;
}).listen(3003, () => console.log('Listen 3003: slow response'));
curl http://localhost:3003

HTTP/1.1 200 正常
内容类型:文本/纯文本;字符集=utf-8
日期:2019 年 2 月 27 日星期三 21:17:06 GMT
连接:保持事件
传输编码:分块

布拉布拉
布拉布拉
布拉布拉
布拉布拉
...

注意:消息是一条一条打印的。

如何使用 v3 方式实现上述目标?

最佳答案

需要明确的是,v3 尚未发布,这只是一个弃用警告,表明 Koa 正在远离生成器函数。您没有使用yield,因此转换它非常容易:

const Koa = require('koa');
const through = require('through');

(new Koa()).use((ctx) => {
const tr = through();
setInterval(() => tr.write('blabla\n'), 1000);
setTimeout(tr.end, 30000);
ctx.type = 'text';
ctx.body = tr;
}).listen(3003, () => console.log('Listen 3003: slow response'));
  1. 将生成器函数替换为具有参数 ctx 的常规函数​​或箭头函数

  2. this 替换为 ctx

编辑:另外,我相信这段代码存在错误。您为每个请求创建一个新的间隔,但从不清除它们。我认为这会被视为内存泄漏。

你可能应该做类似这样的事情:

const Koa = require('koa');
const through = require('through');

(new Koa()).use((ctx) => {
const tr = through();
let intervalId = setInterval(() => tr.write('blabla\n'), 1000);
setTimeout(end(intervalId, tr), 30000);
ctx.type = 'text';
ctx.body = tr;
}).listen(3003, () => console.log('Listen 3003: slow response'));

function end(intervalId, tr) {
return () => {
clearInterval(intervalId);
tr.end();
}
}

关于node.js - 如何使用 koa 生成缓慢的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54914747/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com