[英]Server process progress over Socket.IO
我正在尝试在服务器的前端显示进度条。 我正在尝试使用emits通过websockets( SocketIO )发送进度更新消息,但是我面临的问题是,它们在差异循环结束时会同时聚集在一起,而不是在它们发出时同时出现。
这确实是我正在使用的代码。
//Server side function
functionThatShouldEmitInTime(data){
readFileWithCallback(data, function(dataUpdated){
readFileWithCallback(dataUpdated, function(dataEvenMoreUpdated){
var w = dataEvenMoreUpdated.w;
for (var c in w) {
for (var e in c){
var to_be_filled;
//Do stuff
for (var a in e) {
//do stuff with to_be_filled
for(var pr in a){
//do stuff with to_be_filled
for(var pe i pr){
//do stuff with to_be_filled
}
}
}
writeFileAsync(to_be_filled);
console.log(to_be_filled.name + ' is being written');
socket.emit('file:processed', 'type_of_file');
}
}
});
});
};
当所有循环结束时,仅发送发射,这可以正常工作。 因此,客户端中的进度会在操作结束时立即显示。 并没有逐渐发生。
我尝试通过以下修改强制节点发出。 使用process.nextTick();
//Server side function
functionThatShouldEmitInTime(data){
readFileWithCallback(data, function(dataUpdated){
readFileWithCallback(dataUpdated, function(dataEvenMoreUpdated){
var w = dataEvenMoreUpdated.w;
for (var c in w) {
for (var e in c){
var to_be_filled;
//Do stuff
for (var a in e) {
//do stuff with to_be_filled
for(var pr in a){
//do stuff with to_be_filled
for(var pe i pr){
//do stuff with to_be_filled
}
}
}
writeFileAsync(to_be_filled);
console.log(to_be_filled.name + ' is being written');
process.nextTick(force_emit);
}
}
});
});
};
function force_emit() {
socket.emit('file:processed', 'type_of_file');
}
我还阅读并尝试了此StackOverflow帖子中的所有信息,但未成功:
我想知道是否有解决方法或更好的方法来实现此目的。
顾名思义,writeFileAsync是一个异步函数,因此只要回调中的异步返回都会发出事件,以真正显示进度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.