Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js KoaJS:如何发送部分响应?_Node.js_Stream_Koa - Fatal编程技术网

Node.js KoaJS:如何发送部分响应?

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

我正在学习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").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您成功了吗?