[angular] 타이프 스크립트 수면

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

내 유스 케이스는 몇 초 후에 양식을 제출 한 후 사용자를 리디렉션하여 HTML 또는 자바 스크립트에서 매우 쉽지만 Typescript에서 수행하는 방법을 잘 모르겠습니다.

많은 감사합니다



답변

TS에서 ES6 컴파일에 대해서만 지원되므로 ES5를 지원 하는 async/ await를 지원 하는 TypeScript 2.0을 기다려야합니다 .

다음을 사용하여 지연 기능을 만들 수 있습니다 async.

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

그리고 전화 해

await delay(300);

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있습니다.

PromisePromise를 기본적으로 사용할 수없는 ES5로 컴파일 할 때 구현 이 필요하다는 것을 잊지 마십시오 .


답변

이것은 작동합니다 : (주석 덕분에)

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 })

x 0입니다.

에 두 번째 인수 period를 주면 밀리 초 timer마다 새 숫자가 생성됩니다 period(x = 0, x = 1, x = 2, …).

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


답변

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 초 후에 으르렁 거리는 메시지가 사라집니다.


답변

import { timer } from 'rxjs';

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

이것은 나를 위해 더 잘 작동합니다


답변

또는 함수를 선언하는 대신 간단히 다음을 수행하십시오.

setTimeout(() => {
    console.log('hello');
}, 1000);