Похоже, это Trac # 14002 . Если вы делаете a:
> :set -fpedantic-bottoms
или определяете f
в файле и загружаете его в GHCi, то оба выражения вызывают исключение.
В отчете об ошибке утверждается, что сложно исправить без ущерба для исполнения.
Вы можете использовать оператор таймера для планирования запросов, а затем останавливаться при получении первого статуса «выполнено», см. Пример:
const { of, interval, timer } = rxjs; // = require("rxjs")
const { tap, take, filter, mergeMap } = rxjs.operators; // = require("rxjs/operators")
// simulate API methods
const submitJob = id => of('newjob');
let tries = 0;
function getStatus() {
tries += 1;
if (tries === 5) return of('done');
return of('working...');
}
const getResult = () => of('result');
const job$ = submitJob().pipe(
tap(e => console.log('started job: ', e)),
// wait 500ms and then make request every 1000ms
mergeMap(e => timer(500, 1000).pipe(
// request status every 1 second
mergeMap(t => getStatus()),
tap(e => console.log('status: ', e)),
// when 1 'done' received - stop polling
filter(status => status === 'done'),
take(1)
)),
mergeMap(e => getResult())
)
job$.subscribe(e => console.log('completed: ', e));
<script src="https://unpkg.com/rxjs@6.3.3/bundles/rxjs.umd.min.js"></script>