¿Cómo implementar la función de suspensión en TypeScript?
Estoy desarrollando un sitio web en Angular 2 usando TypeScript y me preguntaba si había alguna manera de implementar thread.sleep(ms)
la funcionalidad.
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 JavaScript, pero no estoy seguro de cómo hacerlo en TypeScript.
Debe esperar a TypeScript 2.0 con async
/ await
para compatibilidad con ES5, ya que ahora solo admite la compilación de TS a ES6.
Podrías crear una función de retraso con async
:
function delay(ms: number) {
return new Promise( resolve => setTimeout(resolve, ms) );
}
y llámalo
await delay(1000);
Por cierto, puedes esperar Promise
directamente:
await new Promise(f => setTimeout(f, 1000));
Tenga en cuenta que solo puede utilizar la función await
interna async
.
Si no puede ( digamos que está creando una aplicación nodejs ), simplemente coloque su código en la async
función anónima. Aquí hay un ejemplo:
(async () => {
// Do something before delay
console.log('before delay')
await delay(1000);
// Do something after
console.log('after delay')
})();
Ejemplo de aplicación TS: https://github.com/v-andrew/ts-template
En OLD JS tienes que usar
setTimeout(YourFunctionName, Milliseconds);
o
setTimeout( () => { /*Your Code*/ }, Milliseconds );
Sin embargo, dado que todos los navegadores principales lo admiten async
, await
es menos útil.
Actualización: TypeScript 2.1 está aquí con
async/await
.
Simplemente no olvide que necesita Promise
implementación cuando compila en ES5, donde Promise no está disponible de forma nativa.
PD
Debe exportar la función si desea utilizarla fuera del archivo original.
Esto funciona: (gracias a los comentarios)
setTimeout(() =>
{
this.router.navigate(['/']);
},
5000);