Sueño de Typescript
Estoy desarrollando un sitio web en Angular 2 usando Typescript y me preguntaba si había una manera de implementar la funcionalidad thread.sleep(ms)
.
Mi caso de uso es redirigir a los usuarios después de enviar un formulario después de unos segundos, lo cual es muy fácil en html o javascript, pero no estoy seguro de cómo hacerlo en Typescript.
Muchas gracias,
3 answers
Tienes que esperar a TypeScript 2.0 con async
/await
para compatibilidad con ES5, ya que ahora solo admite la compilación de TS a ES6.
Usted sería capaz de crear la función de retardo para las funciones asincrónicas:
async function delay(ms: number) {
return new Promise( resolve => setTimeout(resolve, ms) );
}
Y llámalo
await delay(300);
Tenga en cuenta que puede usar await
solo dentro de la función async
.
Si no puedes (digamos que estás construyendo la aplicación nodejs), simplemente coloca tu código en la función anonymous async
. Aquí está un ejemplo:
(async () => {
// Do something before delay
console.log('before delay')
await delay(1000);
// Do something after
console.log('after delay')
})();
En JS tienes que usar
setTimeout(YourFunctionName, Milliseconds);
O
setTimeout( () => { /*Your Code*/ }, Milliseconds );
Actualizar: TypeScript 2.1 está aquí con
async/await
.
Simplemente no olvide que necesita Promise
implementación cuando compila a ES5, donde Promise no está disponible de forma nativa.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-23 18:27:05
Esto funciona: (gracias a los comentarios)
setTimeout(() =>
{
this.router.navigate(['/']);
},
5000);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-11 14:17:15
Por alguna razón la respuesta aceptada anteriormente no funciona en las Nuevas versiones de Angular (V6).
Para eso usa esto..
async delay(ms: number) {
await new Promise(resolve => setTimeout(()=>resolve(), ms)).then(()=>console.log("fired"));
}
Arriba funcionó para mí.
Uso:
this.delay(3000);
O de manera más precisa
this.delay(3000).then(any=>{
//your task after delay.
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-24 13:50:46