구독이 더 이상 사용되지 않음 : 오류 콜백 대신 관찰자를 사용하십시오.


94

linter를 실행하면 다음과 같이 표시됩니다.

subscribe is deprecated: Use an observer instead of an error callback

코드 (angular-cli가있는 angular 7 앱에서) :

    this.userService.updateUser(data).pipe(
       tap(() => {bla bla bla})
    ).subscribe(
       this.handleUpdateResponse.bind(this),
       this.handleError.bind(this)
    );

무엇을 어떻게 사용해야하는지 정확히 모르겠습니다 ...

감사!


1
* 그래서 사용해보십시오.subscribe({ next: this.handleUpdateResponse.bind(this), error: this.handleError.bind(this) })
kos

내 apiRest 사용하여 작동하도록 관리하지 않는
하비에르

답변:


134

subscribe지원 중단되지 않았으며 사용중인 변형 만 지원 중단되었습니다. 앞으로는 핸들러 (함수) 또는 관찰자 객체 subscribe중 하나의 인수 만 취 next합니다.

따라서 귀하의 경우에는 다음을 사용해야합니다.

.subscribe({
   next: this.handleUpdateResponse.bind(this),
   error: this.handleError.bind(this)
});

다음 GitHub 문제를 참조하세요.


6
... 코드 대에 그 구문을 사용되지 여전히 쇼를 유혹 IDK (6.5.3 rxjs)
Yannic 하만

6
안녕하세요 @YannicHamann 이 의견은 이유를 설명합니다. 더 이상 사용되지 않는 것이 아니라 오버로드 중 하나를 사용하지 않고 이제 모든 것이 사용되지 않는 것처럼 보입니다. 대부분 툴링 문제입니다.
Dean

모든 구독 방법이 이제 rxjs 6.5.4에서 더 이상 사용되지 않기 때문에이 답변이 더 이상 유효하지 않다고 생각합니다
Alok Rajasukumaran

39

observerObject가 (여전히) complete()메서드 및 기타 추가 속성을 포함 할 수 있다는 점에 주목하는 것이 흥미로울 수 있습니다 . 예:

.subscribe({
    complete: () => { ... }, // completeHandler
    error: () => { ... },    // errorHandler 
    next: () => { ... },     // nextHandler
    someOtherProperty: 42
});

이렇게하면 특정 방법을 생략하는 것이 훨씬 쉽습니다. 이전 서명에서는 undefined인수 순서 를 제공 하고 고수해야했습니다. 이제 예를 들어 다음의 완전한 핸들러 만 제공 할 때 훨씬 더 명확 해집니다.


10

객체가 형식 Observable<T> | Observable<T2>과 반대로 입력 된 경우이 오류가 발생할 수 있습니다 Observable<T|T2>.

예를 들면 :

    const obs = (new Date().getTime() % 2 == 0) ? of(123) : of('ABC');

컴파일러는 유형을 만들지 않습니다 .obsObservable<number | string>

다음과 같은 경우 오류가 발생 Use an observer instead of a complete callback하고Expected 2-3 arguments, but got 1.

obs.subscribe(value => {

});

두 가지 유형 중 하나 일 수 있고 컴파일러가이를 조정하기에 충분히 똑똑하지 않기 때문입니다.

Observable<number | string>대신 반환하려면 코드를 변경해야합니다 Observable<number> | Observable<string>. 이것의 미묘함은 당신이하는 일에 따라 달라질 것입니다.


2

구독하기 위해 이것을 전달했기 때문에 경고를 받았습니다.

myObs.subscribe(() => someFunction());

단일 값을 반환하므로 subscribe의 함수 서명 과 호환되지 않았습니다 .

이것으로 전환하면 경고가 사라집니다 (null / void 반환).

myObs.subscribe(() => {
  someFunction();
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.