更新前端时串口运行shell命令

时间:2017-12-30 20:00:26

标签: javascript node.js sockets socket.io async.js

我正在尝试构建一个在线转换器,我正面临一个我无法解决的问题。

基本上,我尝试做的只是一个接一个地运行这些东西:

  1. 运行一个命令行操作(使用 require(' child_process')。exec()
  2. 现在命令行操作已完成,更新前端(使用 io.emit()
  3. 现在已经更新了前端,运行另一个命令行操作(再次使用 require(' child_process')。exec())。
  4. 现在第二个命令行操作已完成,再次使用io.emit()更新前端。
  5. 每个前端更新和每个命令行需要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);它也无法正常工作并给我同样的错误。

0 个答案:

没有答案