Necesita hacer una función esperar durante 4 segundos antes de devolver una cadena, pero no tener suerte. Básicamente esto es lo que estoy tratando de hacer:
function myFunction(){
var str = '';
// DO SOMEHITNG HERE so when it's done the finally return "I'm done"
return "I'm done";
}
Esto es lo que tengo actualmente (¿Qué me estoy perdiendo?), Pero también me falta cualquier otra forma de hacerlo. ¡Gracias por adelantado!
function myFunction(){
var counter = 0;
var execute = setInterval(print, 1000);
function print(){
document.write("Counting" + counter + "<br/>");
++counter;
if(counter < 5){
clearInterval(execute);
str = "I'm done";
}
}
return str; // Here I want to return "I'm done"
}
3 respuestas
No puede retrasar el regreso de una función como desee, pero puede devolver una Promesa. Para situaciones como esa, debe usar sime king of asynchronous function:
function myFunction() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve("I'm done");
}, 5000)
}
}
// Now when you use your function, you need to get the results from a then method:
let someVariable;
myFunction().then(function(output) {
console.log(output); // I'm done
someVariable = output;
}
console.log(someVariable); // undefined
Tenga en cuenta que las funciones asincrónicas siempre serán asincrónicas. Es por eso que el último registro de la consola generará {{X 0}}.
En la sección de comentarios, leí que estás usando un AJAX y esperando la respuesta. Así que básicamente puedes usar el siguiente.
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// DO THE REQUIRED HERE AFTER RESPONSE
}
};
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
}
Puede usar función asíncrona y WindowOrWorkerGlobalScope.setTimeout ()
function sleep(seconds) {
return new Promise(result => setTimeout(result, seconds * 1000))
}
async function myFunction() {
// DO SOMEHITNG HERE so when it's done the finally return "I'm done"
await sleep(4) // <-- 4 seconds
return `I'm done`
}
async function asyncCall() {
let str = ''
console.log('str:', str) // <-- empty here
str = await myFunction()
console.log('str:', str) // <-- I\'m done
}
asyncCall()
Preguntas relacionadas
Preguntas vinculadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.