如何在node.js中执行readable.pause(),以便不发出readable.on('end',function(){})?

问题描述:

我正在使用我的express node.js应用程序中的一堆数据。消费更多数据之前,我必须等待我的一项操作完成。如何在node.js中执行readable.pause(),以便不发出readable.on('end',function(){})?

req.on('data', function(data) { 
    req.pause(); 
    do_my_thing(); 
    req.resume(); 
} 
req.on('end', function() { 
    do_my_finish_thing(); 
} 

问题是,即使我暂停流,req.on('end',(){})也会被调用。有没有办法暂停流,以便on('end',(){})不被发射?

你应该有什么工作,但'do_my_thing函数将被异步执行,因此,它几乎会立即恢复。

您可以do_my_thing回调恢复流:

function do_my_thing(callback){ 
    //do your thing 
    callback(); 
} 

req.on('data', function(data) { 
    req.pause(); 
    do_my_thing(function(){ 
     req.resume(); 
    }); 
} 
req.on('end', function() { 
    do_my_finish_thing(); 
} 
+1

对不起,实际上就是这样,你写的是什么。 Do_my_thing也有一个回调,并且回调会恢复流。问题是一样的:如果没有更多数据,req.on('end',(){})将在流暂停时被调用。 – 2014-10-08 22:14:52

结束了以下内容。对改进的建议表示赞赏。

function do_my_thing(callback){ 
    //do your thing 
    callback(); 
} 
function do_my_finish_thing(){}; 

var is_processable = false; 
req.on('data', function(data) { 
    req.pause(); 
    is_processable = false; 
    do_my_thing(function(){ 
     req.resume(); 
     is_processable = true; 
    }); 
} 
req.on('end', function() { 
    function doit() { 
    if (is_processable) { 
     do_my_finish_thing(); 
    } else { 
     setTimeout(doit, 100); 
    } 
    } 
    doit(); 
} 
+0

您是否找到更好的解决方案? 谢谢! – cyberjoac 2016-07-17 20:00:58

+0

目前没有更好的解决方案。 – 2016-07-27 19:39:03