是否可以向异步函数添加一些延迟而不使总延迟超过函数本身所花费的时间?

问题描述 投票:0回答:1

我有一个进行 API 调用的函数,通常会在 50 毫秒到 6 秒之间的延迟后收到响应。如果 API 调用在 1500 毫秒内完成,我希望结果准确地在 1500 毫秒内到达,如果 API 响应在 1500 毫秒后完成,则应该在收到响应后立即返回结果。

我尝试使用这个:

final result = await Future.delayed(Duration(milliseconds: 1500,() async => await apiCall();

但这样做的问题是,

apiCall()
函数仅在延迟 1500 mils 后才会被调用。

dart 有没有直接的方法来实现这一点? 有人试过这个吗?

flutter api dart asynchronous
1个回答
0
投票

我会创建一个辅助函数来测量 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));
© www.soinside.com 2019 - 2024. All rights reserved.