¿Cómo implementar la función de suspensión en TypeScript?

Resuelto kha asked hace 8 años • 9 respuestas

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.

kha avatar Jun 11 '16 21:06 kha
Aceptado

Debe esperar a TypeScript 2.0 con async/ awaitpara 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 Promisedirectamente:

await new Promise(f => setTimeout(f, 1000));

Tenga en cuenta que solo puede utilizar la función awaitinterna async.

Si no puede ( digamos que está creando una aplicación nodejs ), simplemente coloque su código en la asyncfunció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, awaites menos útil.

Actualización: TypeScript 2.1 está aquí con async/await.

Simplemente no olvide que necesita Promiseimplementació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.

v-andrew avatar Jun 11 '2016 14:06 v-andrew

Esto funciona: (gracias a los comentarios)

setTimeout(() => 
{
    this.router.navigate(['/']);
},
5000);
kha avatar Jun 11 '2016 14:06 kha