Flutter 颤振:Future.doWhile结束超时异常

Flutter 颤振:Future.doWhile结束超时异常,flutter,Flutter,捕获超时错误后,我无法在Future.doWhile停止迭代 下面是我的示例函数代码: Future testFunction()异步{ 打印(“>>>开始测试”); 整数秒=0; 等待未来。doWhile(()异步{ 等待未来。延迟(持续时间(秒:5)); sec+=5; 如果(秒>=60){ 打印(“>60秒后结束”); 返回false; } 打印(“>已用$sec秒”); 返回true; }).超时(持续时间(秒:20))。然后(打印)。捕获错误(打印); 打印(“>>>结束测试”); }

捕获超时错误后,我无法在Future.doWhile停止迭代

下面是我的示例函数代码:

Future testFunction()异步{
打印(“>>>开始测试”);
整数秒=0;
等待未来。doWhile(()异步{
等待未来。延迟(持续时间(秒:5));
sec+=5;
如果(秒>=60){
打印(“>60秒后结束”);
返回false;
}
打印(“>已用$sec秒”);
返回true;
}).超时(持续时间(秒:20))。然后(打印)。捕获错误(打印);
打印(“>>>结束测试”);
}
结果:

I/flutter ( 6081): >>> start test
I/flutter ( 6081): > elapsed 5 seconds
I/flutter ( 6081): > elapsed 10 seconds
I/flutter ( 6081): > elapsed 15 seconds
I/flutter ( 6081): TimeoutException after 0:00:20.000000: Future not completed
I/flutter ( 6081): >>> end test
I/flutter ( 6081): > elapsed 20 seconds
I/flutter ( 6081): > elapsed 25 seconds
I/flutter ( 6081): > elapsed 30 seconds
I/flutter ( 6081): > elapsed 35 seconds
I/flutter ( 6081): > elapsed 40 seconds
I/flutter ( 6081): > elapsed 45 seconds
I/flutter ( 6081): > elapsed 50 seconds
I/flutter ( 6081): > elapsed 55 seconds
I/flutter ( 6081): > end doWhile after 60 seconds
为什么doWhile的迭代在捕获超时错误后工作

超时方法

Future<T> timeout (

    Duration timeLimit,
    {FutureOr<T> onTimeout(
    )}

) 
甚至超时方法也是错误的

Future<T> timeout (

    Duration timeLimit,
    {FutureOr<T> onTimeout(
    )}

) 
如果您运行关于的代码。您将看到0超时,并且您永远不会看到未来0的延迟完成

进一步阅读:


检查类似项:
void main(){print('start');Future.delayed(持续时间(秒:6),(){print('delayed');return'delayed ret val';})。timeout(持续时间(秒:3),onTimeout:(){print('tout');return'tout ret val';})。然后(print);
>>> start test
> elapsed 1 seconds
> elapsed 2 seconds
> Timed Out
>>> end test
> elapsed 3 seconds