如何在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();
}
答
结束了以下内容。对改进的建议表示赞赏。
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
对不起,实际上就是这样,你写的是什么。 Do_my_thing也有一个回调,并且回调会恢复流。问题是一样的:如果没有更多数据,req.on('end',(){})将在流暂停时被调用。 – 2014-10-08 22:14:52