0
각도 템플릿이있는 Visual Studio 2017 .NET Core 2.0 프로젝트가 있습니다. 각도 미리 렌더링 시간이 아래 "this.SetUpRefreshInterval()"줄 중 하나의 주석을 제거 할 때. 응용 프로그램은 "NodeInvocationException : 'ClientApp/dist/main-server'의 부팅 기능이 해결되지 않거나 거부 된 약속을 반환했기 때문에 30000ms 이후에 사전 렌더링 시간 초과가 발생했습니다. 부트 기능이 항상 약속을 해결하거나 거부하는지 확인하십시오." 어떤 아이디어?setInterval()을 사용하여 각도 사전 렌더링 시간 초과.
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-currentdatetime',
templateUrl: './currentdatetime.component.html',
styleUrls: ['./currentdatetime.component.css']
})
export class CurrentDateTimeComponent implements OnInit {
private currentDateTime: Date;
constructor() {
this.refreshDate();
//this.setUpRefreshInterval();
}
get currentDateFormatted(): String {
return this.currentDateTime.toLocaleDateString();
};
get currentTimeFormatted(): String {
return this.currentDateTime.toLocaleTimeString();
};
ngOnInit(): void {
//this.setUpRefreshInterval();
}
private setUpRefreshInterval(): void {
setInterval(() => {
this.refreshDate();
}, 1000);
}
private refreshDate(): void {
this.currentDateTime = new Date();
}
}
나는 또한 Observable.timer를 사용하여 시도와 같은 결과를 얻었다 : 여기
구성 요소 코드의 해결 방법으로private setUpRefreshInterval(): void {
let timer = Observable.timer(0, 1000);
timer.subscribe(t => this.currentDateTime = new Date());
}
을, 나는 Krishnanunni의 제안을 사용하고이 변화를 만들어하는 작동 :
import { Component, OnInit, Inject } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import { PLATFORM_ID } from '@angular/core';
constructor(@Inject(PLATFORM_ID) private platformId: Object) {
this.refreshDate();
}
ngOnInit(): void {
// setting up the refresh interval caused a timeout in prerendering, so only set up interval if rendering in browser
if (isPlatformBrowser(this.platformId)) {
this.setUpRefreshInterval();
}
}
왜 생성자와 ngOninit에서 함수를 호출하고 있습니까? 나는 setInterval 대신 Obseravble.timer (1000)를 추천하고 컴포넌트의 ngDestroy에서 unsubscribe한다. –
나는 생성자와 ngOnInit에서 함수를 호출하지 않을 것이다. 나는 그것을 시험해 보았던 두 곳을 보여주고 싶다. 둘 다 프리 렌더링 시간 초과를 유발합니다. Observable.timer() 접근 방식을 시도한 것을 보여주기 위해 질문을 편집했습니다. – drewob
isPlatformBrowser에서 간격 코드를 래핑하여 미리 렌더링되지 않도록하십시오. 사전 렌더링의 타임 아웃이 어떤 종류의 루프를 유발한다고 생각합니다. –