Не может быть тайм-аут более 2 минут с этим .http.get? - PullRequest
0 голосов
/ 14 января 2019

Мой угловой код 4.3.2 вызывает мою внутреннюю службу, которая занимает 2-4 минуты, чтобы вернуться. Используя только код this.http.get по умолчанию, я вижу, что время ожидания по умолчанию наступает через 2 минуты. Однако, когда я пытаюсь установить тайм-аут чего-либо БОЛЕЕ 2 минут, он терпит неудачу в том, что никогда не будет превышать тайм-аут более 2 минут.

Я пробовал с 100, 100000 (1,7м) и 114000 (1,9м), и они работают так, что время ожидания истекает именно при этих значениях. Но когда я пробую 126000 (2,1 м), 180000 (3 м) и 1800000 (30 м), снова я вижу, что время ожидания истекает через 2 минуты.

this.http.get('myUrl')
.timeout(126000)
.map((res: Response) => this.convertResponse(res));

Я тоже пробовал с .timeoutWith(126000, Observable.throw(new Error("Timed out"))) безрезультатно.

1 Ответ

0 голосов
/ 14 января 2019

Вы не можете изменить настройку тайм-аута сетевого браузера для HTTP-запросов. Оператор timeout() выдает ошибку JavaScript при достижении таймера, но это не имеет никакого отношения к тайм-ауту сети для связи.

Например; Я могу использовать оператор timeout() для любого наблюдаемого.

of("hello").pipe(delay(5000), timeout(1000));

Время ожидания истечет через 1 секунду.

Мой угловой код 4.3.2 вызывает мою внутреннюю службу, для возврата которой требуется 2-4 минуты

Сервер должен передавать HTTP-заголовок и частичное тело в течение 2-4 минут. Это необходимо для продолжения HTTP-соединения, и клиент ничего не может сделать, чтобы сохранить соединение.

Это плохая практика, когда HTTP-запрос не завершается быстро.

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

Оба подхода - широкие темы, и я не могу вдаваться в подробности.

...