TypeScript에서 sleep 기능을 구현하는 방법
TypeScript를 사용하여 Angular 2에서 웹 사이트를 개발하고 있는데 구현 방법이 있는지 궁금합니다.thread.sleep(ms)
기능성.
몇 초 후에 폼을 전송한 후 사용자를 리다이렉트하는 것이 제 사용 예인데, JavaScript에서는 매우 쉽지만 TypeScript에서는 어떻게 해야 할지 잘 모르겠습니다.
를 사용하여 TypeScript 2.0을 기다려야 합니다.async
/await
ES5를 지원하는 것은 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 })
x
0 입니다.
두 번째 주장을 하면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
'programing' 카테고리의 다른 글
프로젝터 테스트:로그인 폼에서 텍스트 요소의 값을 설정하려면 어떻게 해야 합니까? (0) | 2023.03.12 |
---|---|
WP_User 객체에서 Wordpress 사용자의 이름을 가져오려면 어떻게 해야 합니까? (0) | 2023.03.12 |
MYSQL 특정 행만 덤프 (0) | 2023.02.04 |
:class가 vue에서 계산된 속성을 호출하지 않습니다(계산된 속성이 호출되지 않음). (0) | 2023.02.04 |
Vue Async 구성 요소를 사용하려면 어떻게 해야 합니까? (0) | 2023.02.04 |