我正在尝试构建一个在线转换器,我正面临一个我无法解决的问题。
基本上,我尝试做的只是一个接一个地运行这些东西:
每个前端更新和每个命令行需要2到10秒,而我需要等待一个完成后才能完成下一个。在后台运行下一个命令行时,我无法开始更新我的前端。我不想要那个。我希望每件事都能运行,等待它完成,然后运行下一件事。
因此,我的服务器端代码如下所示:
async.series([
function (callback) {
client.join(room_, callback);
},
function (callback) {
io.to(room_).emit('step0');
},
function (callback) {
var command_1 = require('child_process').exec('some shell commands');
},
function (callback) {
io.to(room_).emit('step1');
},
function (callback) {
var command_2 = require('child_process').exec('some other shell commands');
},
function (callback) {
io.to(room_).emit('step2');
}
],
function (err, result) {
console.log(result);
});
我的客户端代码看起来像这样:
socket.on('step0', function(data){
for(var i = 0; i < 10; i++) {
(function(i){
setTimeout(function(){
$(".uk-progress").css('width', i + '%');
$(".uk-progress").text(i + '%');
}, 100 * i)
})(i);
}
});
socket.on('step1', function(data){
for(var i = 10; i < 30; i++) {
(function(i){
setTimeout(function(){
$(".uk-progress").css('width', i + '%');
$(".uk-progress").text(i + '%');
}, 1000 * i)
})(i);
}
});
socket.on('step2', function(data){
for(var i = 30; i < 101; i++) {
(function(i){
setTimeout(function(){
$(".uk-progress").css('width', i + '%');
$(".uk-progress").text(i + '%');
}, 100 * i)
})(i);
}
});
并在我的服务器端进行更改
io.to(room_).emit('step0');
到
io.to(room_).emit('step0', callback);
给了我这个错误:Callbacks are not supported when broadcasting
。
如果我尝试io.to(room_).emit('step0', null, callback);
它也无法正常工作并给我同样的错误。