【发布时间】:2017-09-07 07:55:09
【问题描述】:
我有一个函数和一个验证辅助函数,可以将 tsv 文件作为字符串读取。我正在尝试通过使用 rxjs 执行同步任务来练习我的反应式编程。我知道这可能不是它的完美用例,但我知道它应该是可能的。
这是最简单形式的伪代码:
public readTsv(tsv: string): Observable<TsvAsObject> {
if (!tsv || tsv.length < 1) {
return Observable.throw('null or empty tsv file passed');
}
// check tsv headers
this.validHeadersObs(tsv.split('\n')[0]) // pass the first line of the tsv string
.filter(valid => valid === false)
.subscribe(() => {
return Observable.throw('invalid tsv headers')
});
// omitted logic that processes the tsv and then returns it as an observable
return Observable.of(tsvAsObject);
}
我已经测试了我的 validHeaders() 函数,我知道它可以工作。它返回检查每个列标题的布尔值流。一旦一对头文件不匹配,它就会返回一个 Observable.of(false):
private validHeadersObs(headerLine: string): Observable<boolean> {
const headers$ = Observable.from(headerLine.split('\t'));
const validHeaders = ['columnName1', 'columnName2', 'columnName3'];
return headers$
.mergeMap((value, index) => Observable.of(value === validHeaders[index]));
}
问题是 readTsv() 不返回 Observable.throw('invalid tsv headers') 因为我不确定如何从订阅中的函数提前返回。有没有办法从箭头函数内部“双重返回”?
【问题讨论】:
标签: error-handling rxjs reactive-programming