gpt4 book ai didi

angular - 寻找 RxJS 运算符(operator)

转载 作者:太空狗 更新时间:2023-10-29 17:26:53 25 4
gpt4 key购买 nike

我正在使用 Angular 服务来允许用户上传文件。

服务的实现正在运行;我的问题是关于 RxJS 及其管道运算符,但这里是服务签名以防万一:

askUserForFile(): Observable<File>;
toBase64(file: File): Observable<string>;
isFileValid(file: File, configuration?: { size?: number, extensions?: string | string[] }): boolean;

这个服务的调用如下:

  this.fileService
.askUserForFile()
.pipe(
// this is the operator I'm looking for
unknownOperator(file => this.fileService.isFileValid(file, { extensions: ['txt'] }))
mergeMap(file => {
fichier.filename = file.name;
return this.fileService.toBase64(file);
}))
.subscribe(base64 => {
fichier.base64 = base64;
// Rest of my code
}, error => {/* error handling */});

我想找到一个运算符来代替 unknownOperator,如果不满足条件,它会抛出错误。

我试过

  • filter :如果条件不满足,代码在它之后停止,
  • map :即使 throwError
  • 抛出错误,代码也会继续

我考虑过使用下面的管道

.pipe(
map(...),
catchError(...),
mergeMap(...)
)

我认为这可能行得通,但我想(如果可能的话)找到一个运算符(operator)来缩短这条管道。

这可能吗?如果没有,是否有更好的管道?

最佳答案

你可以只使用 map 但你必须用 throw 关键字抛出一个异常,而不是返回 throwError 因为这只会创建另一个 Observable。您也可以使用 mergeMap 然后 throwError 会起作用,但它可能不必要地复杂。

map(val => {
if (val === 42) {
throw new Error(`It's broken`);
}
return val;
})

单线:

mergeMap(val => val === 42 ? throwError(new Error(`It's broken`)) : of(val))

关于angular - 寻找 RxJS 运算符(operator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51948960/

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