Cómo hacer una pausa en una función en javascript hasta que se cumpla una condición, no hasta que se establezca un límite definido en milisegundos!

StackOverflow https://stackoverflow.com/questions/3105709

Pregunta

Este es urgente y no pude encontrar una solución a ella. El problema es el siguiente:

Estoy diseñando una aplicación web, que envía múltiples comandos a varias máquinas. Ahora, algunos de los comandos que tiene requerir entrada adicional. He diseñado una ventana pop-up en jQuery que pregunta al usuario añadir esta entrada adicional. el problema es, mientras que bucle a través de todos los comandos sólo una ventana para el último comando elegido aparece ... esto se debe a que no está en pausa mientras el usuario introduce las entradas antes de ir a la entrada de otro comando.

¿Cómo puedo hacer una pausa en una función de continuar su ejecución en JavaScript / jQuery?

un ejemplo en pseudocódigo:

loop each command
{
  for selected command popup windows;
  // pause until user finishes input then go to
  // next line where any function is processed

  function(); //then loop again--> pause --> when user finishes continue to function() etc..

}

THX por su ayuda y paciencia, he intentado todo tipo de métodos sin ningún resultado. :)

¿Fue útil?

Solución

Si he entendido bien, creo que se debe iniciar la ventana usando window.showModalDialog () en lugar de window.open ().
Se llevará a cabo la ejecución hasta que el diálogo se cierra.

Una forma alternativa es utilizar la función de devolución de llamada.

Otros consejos

¿No puedes usar un cuadro de diálogo prompt para obtener la entrada del usuario? Es modal y la voluntad pausa ejecución en el punto donde se coloca a menos que el usuario cancela la indicación, o proporciona un valor. Y por favor no lo llame feo.

var userValue = prompt("Ask your question");

ejemplo aquí . Esperar un tiempo antes de entrar en un valor o cancelar, y observe las marcas de tiempo.

Esto se suele hacer uso de las funciones de devolución de llamada. Dado que está utilizando jQuery ya, es posible encontrar algo así como el Impromptu complemento útil. Te permite hacer indicaciones modales con las devoluciones de llamada.

Algo así como (parcialmente basado en el ejemplo 9 a partir de enlace anterior). He publicado esto como una demostración en http://jsfiddle.net/28d3C/2/ .

var ind = 0;
var values = [];

var count = 3;

function nextPrompt(done)
{
     function processPrompt(v, m, f)
     {
          if(v != undefined)
          {
            var input = f.alertName;
            values[ind] = input;
          }
          if(++ind < count)
          {
            nextPrompt(done);
          }
          else
          {
            done();
          }
    }

    var txt = 'Please enter value ' + ind + ':  <br /><input type="text" id="alertName" name="alertName" value="name here" />';    
    $.prompt(txt,{
            callback: processPrompt,
            buttons: { Hey: 'Hello', Bye: 'Good Bye' }
    });
}

nextPrompt(function()
{
    for(var i = 0; i < count; i++)
    {
      alert(values[i]);   
    }
});

La respuesta corta es que no se puede 'pausa' la ejecución de Javascript. Se puede hacer algo como esto si emula una pausa lo suficientemente bien como para sus propósitos, pero no es lo mismo.

var answer;

var myInterval = setInterval(function () {
  if (answer != undefined) {
    clearInterval(myInterval);
    // processing code
  }
}, 1000);

answer = prompt("Please enter your name.");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top