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 문제를 참조하세요.
답변
observer
Object가 (여전히) 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');
컴파일러는 유형을 만들지 않습니다 .obs
Observable<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();
});