working not loop ejemplo cleartimeout javascript return settimeout

not - sleep javascript



Obtener valor de retorno de setTimeout (4)

Creo que quieres tener bandera para saber si ocurrió el evento o no. setTimeout no devuelve un valor. Puedes usar una variable para detectar el evento ocurrido o no

var y="notdone"; setTimeout(function () { y="done"; }, 1000);

Puede acceder a la variable y después del tiempo de espera para saber si está hecho o no

Solo quiero obtener el valor de retorno de setTimeout, pero ¿qué es un formato de texto completo de la función?

function x () { setTimeout(y = function () { return ''done''; }, 1000); return y; } console.log(x());


Es mejor tomar una devolución de llamada para la función x y cualquier tarea que desee realizar después de ese tiempo de espera enviar esa devolución de llamada.

function x (callback) { setTimeout(function () { callback("done"); }, 1000); } x(console.log.bind(console)); //this is special case of console.log x(alert)


Necesitas usar Promesas para esto. Están disponibles en ES6 pero se pueden rellenar con gran facilidad :

function x() { var promise = new Promise(function(resolve, reject) { window.setTimeout(function() { resolve(''done!''); }); }); return promise; } x().then(function(done) { console.log(done); // --> ''done!'' });

Con async / await en ES2017, se vuelve más agradable si dentro de una función async :

async function() { const result = await x(); console.log(result); // --> ''done!''; }


No puede obtener un valor de retorno de la función que pasa a setTimeout .

La función que llamó a setTimeout ( x en su ejemplo) terminará de ejecutarse y regresará antes de que la función que pase a setTimeout sea ​​llamada.

Independientemente de lo que quiera hacer con el valor que obtenga, debe hacerlo desde la función que pase a setTimeout .

En tu ejemplo, eso se escribiría como:

function x () { setTimeout(function () { console.log("done"); }, 1000); } x();