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

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)
    );

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

감사!



답변

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

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

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

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


답변

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

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

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


답변

객체가 형식 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>. 이것의 미묘함은 당신이하는 일에 따라 달라질 것입니다.


답변

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

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

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

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

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


답변