2013-04-08 1 views
0

первый раз долгое время здесь. Я только недавно начал программирование в javascript, я столкнулся с вопросом дизайна.Функции обратного вызова, которые ссылаются друг на друга? Вложенные операторы if? Необходимость руководство

У меня есть рабочий код, который: 1. Ожидает ввода определенного значения из последовательного порта, 2. Когда вход найден, он переходит к следующей функции. 3. Следующая функция отправляет команду (команды) по последовательному порту и затем ждет ввода снова.

Теперь у меня есть 9 функций, определенных как stepone() steptwo() и т. Д.. Должен быть лучший способ сделать это. Каждая функция такая же, за исключением различных переменных для ввода и вывода.

Однако я не хочу, чтобы программа пропускала шаги. Перед отправкой следующей команды необходимо дождаться правильного последовательного ввода.

Я пробовал использовать функции обратного вызова, ссылаясь друг на друга, это просто кажется ... неправильным? Кроме того, он не работает. Он не ждет ввода правильного ввода перед отправкой команд.

var waitforinput = function(input, regex, callback) 
    { 
     if (regex.search != -1) 
      callback(); 
    }; 

    var sendcommand = function(command,callback) 
    { 
     port.writeline(command); 
     if (callback) 
      callback(); 
    }; 

    var connect = function() 
    { 
     var int = setInterval(function() 
     { 
      waitforinput(input, "Please choose:", function() 
      { 
       sendcommand("1", function() 
       { 
        waitforinput(input, "You choosed", function() 
        { 
         sendcommand("saveenv 1"); 
        }); 
       }); 
      }); 
     },50); 
    }; 

ответ

0

Я закончил с использованием переключателя (с) случаях и отслеживание переменной называется шаг:

step = 1; 
    switch(step) 
    { 
    case 1: 
     if (inputbuffer.search('Please choose') !== -1) 
     { 
      if (!waitdisplaystarted) 
      { 
       waitdisplaystarted = true; 
       waitint = setInterval(showwait,1000); 
      } 
      window.$("#instructions").hide(); 
      window.$("#status").html("Step 1: Choosing boot option."); 
      SELF.sendserialcommand("1"); 
      step = 2; 
     } 
     break; 
    case 2: 
     if (inputbuffer.search('You choosed 1') !== -1) 
     { 
      SELF.sendserialcommand('setenv bootargs "board=ALFA console=ttyATH0,115200 rootfstype=squashfs,jffs2 noinitrd"\r'); 
      setTimeout(function(){SELF.sendserialcommand('saveenv\r');}, 50); 
      window.$("#status").html("Step 2: Transferring new kernel."); 
      setTimeout(function(){SELF.sendserialcommand('tftp 0x80600000 kernel.bin\r');}, 2000); 
      step = 3; 
     } 
     break; 
    case 3: 
     if (inputbuffer.search('Bytes transferred = ' + 878938) !== -1) 
     { 
      window.$("#status").html("Step 3: Erasing old kernel."); 
      SELF.sendserialcommand('erase 0x9f650000 +0x190000\r'); 
      step = 'finished'; 
     } 
    } 
Смежные вопросы