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();