Flutter如何等待多个并发API全部返回后再执行后续UI更新代码
问题说明
现有函数包含4个API调用逻辑:
getDefects(); getInstruction(); getToDone(); getToInvoice();
要求为:
- 4个API请求同时发起,不需要按顺序逐个等待响应返回
- 必须等4个API的响应全部返回后,才执行后续UI更新逻辑
UI更新代码如下:
status.success(); update(['all']);
当前编写的getData异步函数存在逻辑问题,不会等待所有API返回就直接执行UI更新,错误代码如下:
getData() async { status.loading(); try { getDefects(); getInstruction(); getToDone(); getToInvoice(); status.success(); update(['all']); } catch (e) { status.error(e.toString()); } }
解决方案
直接使用Dart内置的Future.wait方法即可实现需求,该方法会并发执行所有传入的异步任务,待所有任务全部执行完成后才会进入后续逻辑,修正后的代码如下:
getData() async { status.loading(); try { await Future.wait([ getDefects(), getInstruction(), getToDone(), getToInvoice(), ]); status.success(); update(['all']); } catch (e) { status.error(e.toString()); } }
注意事项
- 该写法下4个请求为并发执行,接口总耗时为所有请求中最长的单请求耗时,不会出现顺序等待的耗时累加问题
- 任意一个API请求抛出异常时,都会直接进入catch分支执行错误状态更新逻辑
- 不要给单个API调用单独添加
await关键字,否则会退化为顺序执行,失去并发效果
内容的提问来源于stack exchange,提问作者Ardeshir ojan
相关产品推荐
相关产品推荐

