2017-11-06 3 views
0

나는이 메소드의 반환 값으로 제네릭 형식 T를 지정하는 구문 오류를 받고 있어요 : 수정 프로그램과 일부 또는 무효를 사용하지 않도록하는 것입니다 무엇각도 4.3 : HttpClient를 일반

private getResource<T>(resource: string, pagination?: string): T { 
    this.updateSessionToken(); 
    const url = this.buildUrl(resource, pagination); 
    this.http 
     .get<T>(url, {headers: this.headers, observe: 'response'}) 
     .retry(3) 
     .subscribe(
     (response) => { 
      return response; 
     }, 
     (error: HttpErrorResponse) => { 
      return error; 
     } 
    ); 
    } 

tslint에 의해 다음과 같은 제안 :

당신이 (또한 무효 반환 허용하는) 무효도 어느도 아닌 반환 값을 정의하면

enter image description here

+0

전혀 반환하지 않았습니다 – zgue

+0

정성스럽게 정리해주십시오. 나는 구독 부분에있는 반환이 간계를 할 것이라는 점을 생각했다? –

+2

'http.get()'은 약속을 반환하는 비동기 호출입니다. 이를 동기 코드로 변환 할 수 없습니다. 'async'와'await'를 사용하여 "동기식 스타일"을 사용할 수는 있지만 여전히 비동기식입니다. getResource()에서 반환 할 T 값은 없습니다. 그것이 할 수있는 것은'Promise '입니다. – jcalz

답변

1

, 당신은 어떤 리턴 경로에 값을 반환해야합니다. getResource 함수는 반환 문이 없으므로 아무 값도 반환하지 않습니다. 반환 값을 정의하는 유일한 위치는 (arg1,arg2,...) => {...}과 같은 다른 중첩 된 람다 함수의 내부입니다. 따라서이 중첩 함수의 본문에 return 문을 쓰는 것은 아마도 외부 함수의 값을 반환하지 않습니다. 또한 http.get 함수는 비동기식입니다. 즉, 요청을 보내고 함수 코드를 읽고 응답을 기다리는 동안 차단되지 않고 계속해서 함수의 다음 행이 없으므로 반환하지 않고 함수를 종료합니다. 어떤 값이든. 비동기 프로그래밍에서는 즉각적인 응답을 기대해서는 안되며 결과 대신 성공 람다 (결과를 반환하는 대신 해당 함수 외부에서 사용하는 방식으로 사용)를 제공하기 때문에 아키텍처가 잘못되었을 수 있습니다.), 실패 함수에 대해서도 동일합니다.

웹 개발의 기본 원칙이기 때문에 비동기 요청 주제에 대해 좀 더 읽어 보시고, Observer (기본적으로 Promise의 동일한 개념에서 작동)에 대한 Angular를 읽어 보시기 바랍니다.

관련 문제