Estoy usando console.log() en un programa simple

console.log("Welcome");
var name = prompt("What is your name?");
console.log("Hello" + name);

Pero el mensaje aparece antes del mensaje de bienvenida. ¿Hay alguna manera de tener estos mensajes en secuencia o hay una alternativa?

Quiero que el mensaje de bienvenida aparezca antes de la solicitud, pero eso no sucede y la solicitud aparece antes de arruinar el flujo del programa.

2
jai__ 11 may. 2019 a las 18:19

3 respuestas

La mejor respuesta

Una posible forma de lograr lo que busca es usar un Promise con async/await que se resolverá después de que se complete la llamada setTimeout. De esta manera, puede hacer su propia función de "suspensión" y "pausar" el programa antes de preguntar al usuario:

const sleep = t => new Promise(res => setTimeout(res,t));

(async _ => {
  console.log("Welcome");
  await sleep(1); // sleep for 1 milisecond
  var name = prompt("What is your name?");
  console.log("Hello " + name);
})();

Alternativamente, puede usar alert() para sus salidas en lugar de usar console.log():

alert("Welcome");
var name = prompt("What is your name?");
alert("Hello " + name);
1
Nick Parsons 11 may. 2019 a las 15:58

Aquí está la solución más simple ...

const p = new Promise((resolve) => {
  console.log("Welcome");
  resolve();
});

p.then(() => {
  var name = prompt("What is your name?");
  console.log("Hello" + name);
});

Recomiende contra el uso de tiempos de espera ya que no son confiables para este propósito. Este código simplemente dice "haz esto", luego "haz eso" en secuencia.

0
Randy Casburn 11 may. 2019 a las 15:36

Aquí hay una versión simple:

console.log("Welcome");
setTimeout(() => {
  var name = prompt("What is your name?");
  console.log("Hello " + name);
}, 0)

Simplemente tiene que mover la solicitud al siguiente tic. setTimeout lo hará.

0
Scott Sauyet 11 may. 2019 a las 15:34