如果方法的执行花费的时间超过定义的超时,我想发出错误。我试过这个(ES6):
getExec() {
return _getObs().timeout(5000, new Error("timeout reached")); //5s timeout
}
_getObs() {
return rx.Observable.create((sub) => {
sub.onNext(executeVerySlowMethod());
sub.onCompleted();
});
}
当我订阅getExec
时,它不会引发任何错误。我究竟做错了什么? (executeVerySlowMethod
是一种非常慢的方法,需要5秒以上)
答案 0 :(得分:2)
没有.timeout()
可用的重载,它会带来自定义错误。这在RxJs5中被删除。您的代码会出错,因为第二个参数应该是Scheduler|null
类型。
也;只需使用容易出错的Observable.of(executeVerySlowMethod())
,就可以更轻松地创建一个包含函数的observable。
Observable
.of(executeVerySlowMethod())
.timeout(5000)
应该可以解决executeVerySlowMethod()
阻止//同步。
答案 1 :(得分:0)
这是一种新的实现方式:(RxJS6)
import { of, TimeoutError, throwError } from 'rxjs';
import { timeout, catchError } from 'rxjs/operators';
of(executeVerySlowMethod()).pipe(
timeout(5000),
catchError(err => {
if (err instanceof TimeoutError) {
throw new Error('timeout reached');
}
return throwError(err);
}))