У меня есть служба, которую распознаватель использует для генерации и возврата отчета.
При первоначальном получении службы вызывается конечная точка REST /report
, которая запускает рабочую работу на сервере, так как отчет интенсивно использует процессор и занимает более 30 секунд. Конечная точка report
возвращает идентификатор рабочего задания.
Затем мне нужно опросить конечную точку REST рабочего задания /job/job_id
с соответствующим идентификатором для задания. Я продолжаю опрос до тех пор, пока он не вернет состояние «завершено» и содержит готовый отчет.
Затем этот окончательный результат возвращается из службы, и распознаватель использует его.
Я не смог чтобы это работало с опросом. Я передаю ответ в начальную конечную точку отчета в switchMap, а затем использую интервал для повторного опроса каждые 500 мс конечной точки /job/job_id
. Затем я пытаюсь переключить карту ответа на запрос и вернуться, если она завершена. Я впервые использую switchMap и опросы, поэтому я не уверен, правильно ли я это использую.
Вот моя последняя попытка кода:
getDepartmentReport() {
return this.http
.get<any>(reportUrl, this.getAuthOptions(true))
.pipe(switchMap(initialResponse => {
interval(500).pipe(
switchMap(() => {
return this.http.get<any>(workerUrl + initialResponse.id, this.getAuthOptions(true))
.pipe(
switchMap(pollResponse => {
if(pollResponse.state === 'completed') {
return pollResponse;
}
})
}));
}));
}
Это на самом деле не скомпилируется. Это выдает следующую ошибку:
Argument of type '(initialResponse: any) => void' is not assignable to parameter of type '(value: any, index: number) => ObservableInput<any>'.
Type 'void' is not assignable to type 'ObservableInput<any>'.
56 .pipe(switchMap(initialResponse => {
Я предполагаю, что это происходит потому, что при неполных ответах на опрос не существует оператора возврата для обработки этой ситуации и возвращается пустота.
Кто-нибудь получил Любые идеи? Я в тупике.