Node.js KoaJS:如何发送部分响应?
我正在学习Node.JS流 我试图做的是发送一个部分HTTP响应,然后在短时间后发送其余的响应Node.js KoaJS:如何发送部分响应?,node.js,stream,koa,Node.js,Stream,Koa,我正在学习Node.JS流 我试图做的是发送一个部分HTTP响应,然后在短时间后发送其余的响应 app.get("/", function*(next) { // TEST: function delay(ms) { return function(callback) { setTimeout(callback, ms); } } this.type = "text/plain"; var Readable = require("stream
app.get("/", function*(next) {
// TEST:
function delay(ms) {
return function(callback) {
setTimeout(callback, ms);
}
}
this.type = "text/plain";
var Readable = require("stream").Readable;
var stream = this.body = new Readable();
stream._read = function () {};
stream.push('First line.\n');
yield delay(2000);
stream.push('Last line.\n');
stream.push(null);
console.log("done");
});
我希望在浏览器中加载页面时,会立即显示“第一行”,2秒钟后还会显示“第二行”。相反,响应似乎是作为一个整体发送的
我错过了什么
最后,我希望在一个长期存在的连接到浏览器中,将内部生成的日志数据流化
节点0.113.膝关节炎性因子0.10 0/p>< P>流后再管道,您没有机会刷新函数内的数据。 检查代码:
var koa = require('koa')
var Readable = require('stream').Readable
var app = koa()
app.use(function*(next){
this.type = 'text/plain'
var stream = this.body = new Readable()
stream._read = function () {}
// isn't piped
console.log(stream._readableState.pipes != null)
yield function (callback) { setTimeout(callback, 2000) }
// not yet
console.log(stream._readableState.pipes != null)
var i = 0
setTimeout(function f(){
if (i == 0)
// now it is
console.log(stream._readableState.pipes != null)
stream.push(Date() + '\n');
if (++i < 200)
setTimeout(f, 50)
else
stream.push(null)
}, 100)
})
app.listen(80)
<代码> var KAa=要求(膝关节炎)
var Readable=require('stream')。Readable
var app=koa()
应用程序使用(功能*(下一步){
this.type='text/plain'
var stream=this.body=new Readable()
stream.\u read=函数(){}
//这不是管道吗
console.log(stream.\u readableState.pipes!=null)
屈服函数(回调){setTimeout(回调,2000)}
//还没有
console.log(stream.\u readableState.pipes!=null)
变量i=0
setTimeout(函数f(){
如果(i==0)
//现在是了
console.log(stream.\u readableState.pipes!=null)
stream.push(日期()+'\n');
如果(++i<200)
设置超时(f,50)
其他的
stream.push(空)
}, 100)
})
app.listen(80)
现在,我对膝关节炎不太熟悉,所以可能存在另一种解决方案。
一个附加:最好使用<代码> nExtTik> <代码>代替<代码> SETTIMEOUT。许多不同的流媒体模块正是这样做的。@UdoG您成功了吗?