gpt4 book ai didi

angular - 类型 'do' 上不存在属性 'Observable'

转载 作者:太空狗 更新时间:2023-10-29 16:49:48 27 4
gpt4 key购买 nike

升级到 Angular 6.0 和 Rxjs 到 6.0 后,我收到以下编译错误:

属性“do”在“Observable”类型上不存在。

代码如下:

import { Observable, of } from 'rxjs';
import 'rxjs/add/operator/do';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/catch';
import { IProduct } from './product';

@Injectable()
export class ProductService {
constructor(
private product: IProduct)
{
}

getProduct = () => {
return product.products
// error on next line
.do(data => console.log('All:' + JSON.stringify(data)))
.catch(this.handleError);
}

private handleError(err: HttpErrorResponse) {
console.log(err.message);
return Observable.throw(err.message);
}
}

有什么想法吗?

最佳答案

问题不在于 Angular ,而在于 rxjs。 rxjs 引入了 rxjs 版本 6 的重大更改。

要让您的代码在不更改任何代码的情况下再次运行,请安装以下软件包:

npm install rxjs-compat@6 --save

然后您应该能够编译您的项目。 rxjs-compat 是一个临时解决方案,因此您需要更新代码库以使用新版本。


新导入路径

您需要更新的内容:

  1. 更新来自

    的导入语句

    从“rxjs/Observable”导入 {Observable};

    从“rxjs”导入 {Observable};

  2. 更新您的运营商导入

    导入 'rxjs/add/operator/do'

    从“rxjs/operators”导入{do};


重命名运算符

由于与 JavaScript 保留字的名称冲突,某些运算符也已重命名。他们是

  1. => tap

  2. catch => catchError

  3. switch => switchAll

  4. finally => finalize


无运算符链

你也不能再链接你的操作符了,你需要使用 pipe 操作符,例如

// an operator chain
source
.map(x => x + x)
.mergeMap(n => of(n + 1, n + 2)
.filter(x => x % 1 == 0)
.scan((acc, x) => acc + x, 0)
)
.catch(err => of('error found'))
.subscribe(printResult);
// must be updated to a pipe flow
source.pipe(
map(x => x + x),
mergeMap(n => of(n + 1, n + 2).pipe(
filter(x => x % 1 == 0),
scan((acc, x) => acc + x, 0),
)),
catchError(err => of('error found')),
).subscribe(printResult);

关于angular - 类型 'do' 上不存在属性 'Observable<IProduct[]>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50209119/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com