6 rxjs typescript angular rxjs-pipeable-operators
我正在使用Angular服务来允许用户上传文件.
该服务的实施正在发挥作用; 我的问题是关于RxJS及其可管理的运算符,但这里是服务签名以防万一:
askUserForFile(): Observable<File>;
toBase64(file: File): Observable<string>;
isFileValid(file: File, configuration?: { size?: number, extensions?: string | string[] }): boolean;
Run Code Online (Sandbox Code Playgroud)
对此服务的调用如下:
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 */});
Run Code Online (Sandbox Code Playgroud)
我想找到一个代替unknownOperator它的运算符如果不满足条件就会抛出错误.
我试过了
filter :如果条件不满足,代码会在之后停止,map :即使出现错误,代码仍会继续 throwError我想过用下面的管道
.pipe(
map(...),
catchError(...),
mergeMap(...)
)
Run Code Online (Sandbox Code Playgroud)
我认为可能有用,但我想找到(如果可能的话)一个缩短这种管道的操作员.
可能吗 ?如果没有,是否有更好的管道?
你可以使用 justmap但你必须用关键字抛出异常throw,而不是返回,throwError因为这只会创建另一个 Observable。您也可以使用mergeMapand thenthrowError来工作,但它可能不必要地复杂。
map(val => {
if (val === 42) {
throw new Error(`It's broken`);
}
return val;
})
Run Code Online (Sandbox Code Playgroud)
单行:
mergeMap(val => val === 42 ? throwError(new Error(`It's broken`)) : of(val))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |