오류: 유형이 Promise 호환 생성자를 참조하지 않으므로 ES5/ES3에서 올바른 비동기 함수 반환 유형이 아닙니다.
나는 이 함수를 TypeScript로 작성했습니다.
export class LoginService {
async isLoggedIn(): boolean {
const r = await this.http.get('http://localhost:3000/api/user/isLoggedIn').toPromise();
return r.body;
}
}
Angular 6 응용 프로그램을 실행하려고 하면 다음 오류 메시지가 표시됩니다.
src/app/login에 오류가 있습니다.service.ts(28,23): 오류 TS1055:'boolean' 유형은 Promise 호환 생성자 값을 참조하지 않으므로 ES5/ES3에서 올바른 비동기 함수 반환 유형이 아닙니다.
저는 전에 이것을 누르지 않고 다른 애플리케이션에서 비동기/대기를 사용한 적이 있습니다.
업데이트: 답변하고 싶은 질문은 "isLoggedIn" 함수가 부울을 반환하도록 하려면 어떻게 해야 합니까?
안async
함수는 정의에 의해서만 약속을 반환할 수 있습니다 - 모두async
함수는 약속을 반환합니다.부울을 반환할 수 없습니다.
TypeScript는 그렇게 말하고 있습니다.async
함수는 부울로 해결되는 약속을 반환할 수 있습니다.
당신이 가진 가치return
마음속에async
함수는 약속의 해결된 값이 됩니다.async
함수가 반환됩니다.그래서, 당신의 반품 타입은async
함수는 약속입니다(부울로 해결됨).
의 발신자isLoggedIn()
를 사용해야 합니다..then()
그것과 함께 또는await
그것과 함께.
export class LoginService {
async isLoggedIn(): Promise<any> {
const r = await this.http.get('http://localhost:3000/api/user/isLoggedIn').toPromise();
return r.body;
}
}
엔드포인트인 경우/api/user/isLoggedIn
부울 값만 반환합니다. 아래에서는 http get 메서드를 캐스팅하여 사용할 수 있습니다.그러나 실제로 당신은 비동기 함수에서만 약속을 반환할 수 있습니다.
export class LoginService {
async isLoggedIn(): Promise<boolean> {
return this.http.get<boolean>('http://localhost:3000/api/user/isLoggedIn').toPromise();
}
}
사용하는 비동기 기능이 있을 수 있습니다.isLoggedIn()
다음과 같이:
async doSomething() {
const loggedIn: boolean = await service.isLoggedIn();
if (loggedIn) {
doThis();
}
}
이런 식으로 부를 수도 있습니다.
await doSomething();
반환 유형은 약속이어야 합니다.
/* sync */ isLoggedIn(): boolean
async isLoggedIn(): Promise<boolean>
비동기 함수는 약속(비동기화를 위해 필수)을 반환하며, 사용자는 약속이 부울로 해결됨을 나타냅니다.
이 질문은 조회 수가 많기 때문에 좀 더 광범위한 유형의 (가능한) 솔루션을 제공하겠습니다.업데이트할 수 있는 경우tsconfig
파일의target
더 이상 오류가 발생하지 않을 현대적인 것에 가치를 둡니다.
내 경우:
// tsconfig.json
{
"compilerOptions": {
"target": "ESNext",
...
}
}
계속하기 전에 프로젝트를 빌드/시작할 수 있고 모든 것이 정상인지 확인하십시오.
언급URL : https://stackoverflow.com/questions/52694418/error-type-is-not-a-valid-async-function-return-type-in-es5-es3-because-it-does
'source' 카테고리의 다른 글
결과 열의 다른 값을 다른 열 sql의 값별로 단일 행으로 가져오는 방법 (0) | 2023.08.04 |
---|---|
"Provider com.fasterxml.jackson.module.jaxb.Spring Boot 업그레이드 후 "Jaxb Annotation Module을 찾을 수 없음" (0) | 2023.08.04 |
도커 안에서 도커를 실행해도 괜찮습니까? (0) | 2023.08.04 |
TypeScript - Angular 2의 컨테이너 요소에 HTML 추가 (0) | 2023.08.04 |
IIS - localhost가 아닌 IP 주소로 페이지에 액세스할 수 없습니다. (0) | 2023.08.04 |