Flutter异步函数顺序执行异常:按需执行后Function3提前运行
问题根源
你写的Function1虽然加了async关键字,但内部的文件上传异步操作根本没被等待——你用了.then()处理结果,但既没await这个操作,也没把.then()返回的Future抛出去。这就导致await Function1()其实是个假等待,Function1会立刻执行完返回,后续的Function3直接跟着跑,和上传操作并行执行了。
两种修复方法
方法1:用await替代.then()(更直观)
把链式调用换成await写法,让async函数真正等待上传完成:
Future Function1() async { try { final value = await apiService.apiFileUpload(); /// 这里写原来.then里的业务代码 } catch (error) { print('EEEE: ' + error.toString()); } }
方法2:返回.then()的Future
要是习惯用.then(),必须把整个链式调用的Future返回,这样外部的await才能捕获到:
Future Function1() async { return apiService .apiFileUpload() .then((value) async { /// 这里写原来.then里的业务代码 }).catchError((error) { print('EEEE: ' + error.toString()); }); }
验证执行顺序
修复完Function1(如果Function2也是类似写法,同样处理),原来的调用逻辑就能正常按顺序执行了:
if(condition1){ await Function1(); // 现在会等内部上传操作完全结束 } if(condition2){ await Function2(); // 同理等待Function2完成 } await Function3(); // 前面所有异步操作都做完才会执行这里
另外注意你原代码里Functon3()拼错了,少了个i,要改成Function3()。
内容的提问来源于stack exchange,提问作者Kasun Hasanga
相关产品推荐
相关产品推荐

