我有一个进行 API 调用的函数,通常会在 50 毫秒到 6 秒之间的延迟后收到响应。如果 API 调用在 1500 毫秒内完成,我希望结果准确地在 1500 毫秒内到达,如果 API 响应在 1500 毫秒后完成,则应该在收到响应后立即返回结果。
我尝试使用这个:
final result = await Future.delayed(Duration(milliseconds: 1500,() async => await apiCall();
但这样做的问题是,
apiCall()
函数仅在延迟 1500 mils 后才会被调用。
dart 有没有直接的方法来实现这一点? 有人试过这个吗?
我会创建一个辅助函数来测量 API 调用所花费的时间,然后在返回结果之前添加适当的延迟:
Future<R> callWithMinimumDuration<R>(
Future<R> Function() func,
Duration minimumDuration,
) async {
var stopwatch = Stopwatch()..start();
var result = await func();
var delta = minimumDuration - stopwatch.elapsed;
if (delta > Duration.zero) {
await Future.delayed(delta);
}
return result;
}
然后你可以用以下方式调用它:
var result = await callWithMinimumDuration(apiCall, Duration(milliseconds: 1500));