Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtSpHtTmo 170 of 224 menu
◀ ▶

Таймаут запроса в Dart

Долгий ответ можно оборвать по времени. У Future, который возвращает http.get, есть метод timeout с Duration - счетчик идет на весь обмен, включая чтение тела.

Путь "/delay/1" на httpbin.org ждет около секунды перед ответом. Лимит короче этой паузы приводит к исключению:

import 'dart:async'; import 'package:http/http.dart' as http; void main() async { var uri = Uri.parse('https://httpbin.org/delay/1'); try { await http.get(uri).timeout( Duration(milliseconds: 300), ); } on TimeoutException { print('timeout'); } }

Лимит задают отдельно для каждого вызова через Duration. Для медленного ответа после соединения нужен именно timeout на Future запроса:

import 'package:http/http.dart' as http; void main() async { var limit = Duration(milliseconds: 400); var uri = Uri.parse('https://httpbin.org/delay/1'); var response = await http.get(uri).timeout(limit); print(limit.inMilliseconds); print(response.statusCode); }

Отправьте чтение на "/delay/1" с лимитом 200 миллисекунд. Выведите "timeout", если сработало исключение по времени.

Выведите "ok", если запрос к "/delay/1" успел завершиться при лимите 3 секунды, и "timeout" при более коротком лимите 100 миллисекунд - две строки подряд.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить