我喜欢在我的Dart应用程序中模拟一个异步web服务调用进行测试。为了模拟这些模拟调用响应的随机性(可能是无序的),我想编程我的模拟在返回“Future”之前等待(睡眠)一段时间。

我该怎么做呢?


当前回答

2019年版:

异步代码

await Future.delayed(Duration(seconds: 1));

同步代码

import 'dart:io';

sleep(Duration(seconds:1));

注意:这将阻塞整个进程(隔离),因此其他异步函数将不会被处理。它也不能在网络上使用,因为Javascript是纯异步的。

其他回答

这是一个有用的模拟,可以接受一个可选参数来模拟错误:

  Future _mockService([dynamic error]) {
    return new Future.delayed(const Duration(seconds: 2), () {
      if (error != null) {
        throw error;
      }
    });
  }

你可以这样使用它:

  await _mockService(new Exception('network error'));

你也可以使用future .delayed工厂来完成延迟后的future。下面是两个函数在延迟后异步返回字符串的示例:

import 'dart:async';

Future sleep1() {
  return new Future.delayed(const Duration(seconds: 1), () => "1");
}

Future sleep2() {
  return new Future.delayed(const Duration(seconds: 2), () => "2");
}

如果你需要在一段时间后执行一些代码

        Future.delayed(const Duration(seconds: 5), () {
//do something
        });

你可以这样用:

sleep(Duration(seconds: 5));

Or

  Future.delayed(const Duration(seconds: 5));

它并不总是你想要的(有时你想要Future.delayed),但如果你真的想在Dart命令行应用程序中睡觉,你可以使用Dart:io的sleep():

import 'dart:io';

main() {
  sleep(const Duration(seconds:1));
}