programing

TypeScript에서 sleep 기능을 구현하는 방법

randomtip 2023. 3. 12. 21:06
반응형

TypeScript에서 sleep 기능을 구현하는 방법

TypeScript를 사용하여 Angular 2에서 웹 사이트를 개발하고 있는데 구현 방법이 있는지 궁금합니다.thread.sleep(ms)기능성.

몇 초 후에 폼을 전송한 후 사용자를 리다이렉트하는 것이 제 사용 예인데, JavaScript에서는 매우 쉽지만 TypeScript에서는 어떻게 해야 할지 잘 모르겠습니다.

를 사용하여 TypeScript 2.0을 기다려야 합니다.async/awaitES5를 지원하는 것은 TS에서 ES6로의 컴파일뿐입니다.

지연 함수를 생성할 수 있습니다.async:

function delay(ms: number) {
    return new Promise( resolve => setTimeout(resolve, ms) );
}

그리고 그것을 불러라.

await delay(1000);

그나저나 너는 기다릴 수 있어Promise직접:

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

주의해 주십시오.await내부에서만async기능.

할 수 없는 경우(를 들어 nodejs 어플리케이션을 빌드하고 있다고 합시다), 코드를 익명으로 해 주세요.async기능.다음은 예를 제시하겠습니다.

    (async () => { 
        // Do something before delay
        console.log('before delay')

        await delay(1000);

        // Do something after
        console.log('after delay')
    })();

TS 어플리케이션의 예:https://github.com/v-andrew/ts-template

OLD JS에서는 다음을 사용해야 합니다.

setTimeout(YourFunctionName, Milliseconds);

또는

setTimeout( () => { /*Your Code*/ }, Milliseconds );

단, 모든 주요 브라우저가async/await그것은 덜 유용하다.

업데이트: TypeScript 2.1은async/await.

당신이 필요하다는 것을 잊지 마세요.Promise구현은 ES5로 컴파일할 때 수행되며 Promise는 기본적으로 사용할 수 없습니다.

PS

원래 파일 외부에서 기능을 사용하려면 함수를 내보내야 합니다.

(댓글 덕분에) 효과가 있습니다.

setTimeout(() => 
{
    this.router.navigate(['/']);
},
5000);

어떤 이유로 인해 위에서 승인된 답변은 새로운 버전의 Angular(V6)에서는 작동하지 않습니다.

이걸 쓰려면..

async delay(ms: number) {
    await new Promise(resolve => setTimeout(()=>resolve(), ms)).then(()=>console.log("fired"));
}

위는 나에게 효과가 있었다.

사용방법:

this.delay(3000);

또는 보다 정확한 방법

this.delay(3000).then(any=>{
     //your task after delay.
});

와 함께RxJS:

import { timer } from 'rxjs';

// ...

timer(your_delay_in_ms).subscribe(x => { your_action_code_here })

x0 입니다.

두 번째 주장을 하면period로.timer, 새로운 번호가 각각 송신됩니다.period밀리초(x = 0 다음 x = 1, x = 2, ...)

자세한 내용은 공식 문서를 참조하십시오.

또는 함수를 선언하는 대신 다음과 같이 단순합니다.

setTimeout(() => {
    console.log('hello');
}, 1000);
import { timer } from 'rxjs';
import { take } from 'rxjs/operators';

await timer(1000).pipe(take(1)).toPromise();

이것은 나에게 더 효과적이다.

angular5 이상을 사용하는 경우 ts 파일에 다음 방법을 포함시켜 주십시오.

async delay(ms: number) {
    await new Promise(resolve => setTimeout(()=>resolve(), ms)).then(()=>console.log("fired"));
}

원하는 위치에 이 delay() 메서드를 호출합니다.

예:

validateInputValues() {
    if (null == this.id|| this.id== "") {
        this.messageService.add(
            {severity: 'error', summary: 'ID is Required.'});
        this.delay(3000).then(any => {
            this.messageService.clear();
        });
    }
}

그러면 3초 후에 메시지가 사라집니다.

ES6에서 올바르게 하는 방법은

import { setTimeout } from 'timers/promises';

await setTimeout(5000);

현재는 네이티브 노드 방식입니다.https://nodejs.org/api/timers.html

RxJ 를 사용할 수도 있습니다.

import { of } from 'rxjs';
import { delay } from 'rxjs/operators';

async yourFunction() {
    yourCode;
    await this.delay(5000);
    yourCode;
}

delay(ms: number): Promise<any> {
    const dummyObservable = of();
    return dummyObservable.pipe(delay(ms)).toPromise();
}

언급URL : https://stackoverflow.com/questions/37764665/how-to-implement-sleep-function-in-typescript

반응형