gpt4 book ai didi

javascript - Socket.IO 上的服务器进程进度

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:23 25 4
gpt4 key购买 nike

我正在尝试在前端显示服务器上发生的进程的进度条。我正在尝试使用发射通过 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');
}
}
});
});
};

这工作正常,只是当所有循环结束时发送。因此,客户端中的进度会在操作结束时立即显示。并不是逐渐发生的。

我尝试通过以下修改强制 Node 发出。使用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 帖子中的所有信息,但没有成功:

Sending Multiples Emits Inside a Loop

Nodejs SocketIO Emit Function Loop

SocketIo Emit in Loop Until Client Responds

SocketIo Inside Loop Does Not Work

我想知道是否有解决方法或更好的方法来实现这一点。

最佳答案

正如名称 writeFileAsync 是一个异步函数,因此每当 async 返回时回调发出事件,真实显示进度。

关于javascript - Socket.IO 上的服务器进程进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46240227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com