구독이 더 이상 사용되지 않음:오류 콜백 대신 관찰자 사용
내가 린터를 돌리면 다음과 같이 되어 있다.
subscribe is deprecated: Use an observer instead of an error callback
코드(각-cli가 있는 각도 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
물체는 또한 (여전히) 다음을 포함할 수 있다.complete()
메서드 및 기타 추가 속성.예:
.subscribe({
complete: () => { ... }, // completeHandler
error: () => { ... }, // errorHandler
next: () => { ... }, // nextHandler
someOtherProperty: 42
});
이렇게 하면 특정 방법을 생략하는 것이 훨씬 쉽다.예전 서명으로 공급할 필요가 있었다.undefined
그리고 논쟁의 순서를 고수하라.이제는 예를 들어 다음 완벽한 핸들러만 공급할 때 훨씬 더 명확해졌다.
나에게 있어, 그것은 단지 나의 VSCode가 가리키는 형식적인 버전이었다.
GitHub 코멘트의 도움을 받았어.
나는 이것이 형식적인 문제라고 믿는다.서식의 최신 버전에 있는 무언가가 이 경고를 코드 대 코드로 표시하게 하고 있다.vs 코드의 오른쪽 하단에 있는 typecript 버전을 클릭하고 typecript 버전 선택 옵션을 선택함으로써 나는 그것이 없어지도록 할 수 있었다.우리의 경우 4.0.7인 각도 프로젝트에 설치한 node_modules 버전으로 설정했다.이로 인해 경고는 사라지게 되었다.
객체를 다음과 같이 입력하면 이 오류가 발생할 수 있다.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>
이것의 미묘한 점은 당신이 무엇을 하느냐에 따라 달라질 것이다.
마이그레이션한 경우Angular
에서 투영하다.TSLint
로ESLint
그리고 그것은 이제 더 이상 경고를 나타내지 않는다!
나는 이러한 단계를 따랐다. (각 단계의 끝도 변경을 수행할 것을 권고한다.)
eslint 추가:
ng add @angular-eslint/schematics
tslint를 eslint로 변환:
ng g @angular-eslint/schematics:convert-tslint-to-eslint
제거하다
tslint
그리고codelyzer
:npm uninstall -S tslint codelyzer
많은 린트 문제를 자동으로 수정하려면
ng lint --fix
(고정되지 않은 문제도 나열됨)에서 VSCode
TSLint
플러그인, 설치ESLint
플러그인과 VSCode를 다시 로드하십시오.패키지 및 패키지 잠금 파일이 업데이트되었는지 확인하십시오.또한 프로젝트의 node_modules.
만약 당신이 그것을 가지고 있다면.
tsconfig.json
하위 디렉터리 아래의 파일 - 추가/업데이트 필요projects-root-directory/.vscode/settings.json
하위 디렉토리와 함께tsconfig
파일들은!{ "eslint.workingDirectories": [ "sub-directory-where-tsconfig-files-are" ] }
- VS Code 공식 페이지 정보: TSLint에서 ESLint로 마이그레이션(코멘트에 이 점을 지적해줘서 고마워!)
- TSLint에서 ESLint 참조로 각도 마이그레이션
나는 구독 신청을 위해 이것을 전달했기 때문에 경고를 받고 있었다.
myObs.subscribe(() => someFunction());
단일 값을 반환하기 때문에 호환이 안 된다.subscribe
의 기능 서명
이 상태로 전환하면 경고가 사라진다(null/void 반환).
myObs.subscribe(() => {
someFunction();
});
너는 tslint를 eslint로 교체해야 한다.
더 사용되지 않기 때문에 TSLintga를 .@deprecated
RXJS의 문 구독을 할 수 있는 ESLint는 올바르게 보풀을 구독하기 위해 사용할 올바른 린터입니다.
자세한 내용은 공식 웹 사이트 https://rxjs.dev/decemptions/subscriptions에서 확인하십시오.
주목하라{}
아래 두 번째 구독 코드의 교정기
import { of } from 'rxjs';
// recommended
of([1,2,3]).subscribe((v) => console.info(v));
// also recommended
of([1,2,3]).subscribe({
next: (v) => console.log(v),
error: (e) => console.error(e),
complete: () => console.info('complete')
})
'programing' 카테고리의 다른 글
history hook in jest를 조롱하는 방법? (0) | 2022.03.11 |
---|---|
ReactRedex 오류: 기본 파라미터는 default-param-last여야 함 (0) | 2022.03.11 |
사용자 지정 후크에 콜백을 사용하는 방법? (0) | 2022.03.11 |
TypeError 가져오기: 개체(...)는 대응에서 경로를 변경할 때 사용하는 함수가 아님 (0) | 2022.03.11 |
@/xxxx/구성요소를 사용하는 방법vuejs 구성 요소를 가져오시겠습니까? (0) | 2022.03.10 |