Как я могу опросить результаты работы и прекратить работу, если статус сделан с помощью rxjs6?

Похоже, это Trac # 14002 . Если вы делаете a:

> :set -fpedantic-bottoms

или определяете f в файле и загружаете его в GHCi, то оба выражения вызывают исключение.

В отчете об ошибке утверждается, что сложно исправить без ущерба для исполнения.

0
задан Zoe 19 January 2019 в 09:11
поделиться

1 ответ

Вы можете использовать оператор таймера для планирования запросов, а затем останавливаться при получении первого статуса «выполнено», см. Пример:

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>

0
ответ дан Zoe 19 January 2019 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: