同时获取多个内容,并且一起完成后返回
//从网络更新最新数据
requestData() async{
if(!isLogin) return;
return Future.wait([
ApiUser.fullInfo(),
ApiFinance.wallet(),
ApiAddress.getDefault(),
]).then((contents){
currentUser=User.fromJson(contents[0]['data']);
wallet=Wallet.fromJson(contents[1]['data']);
address=Address.fromJson(contents[2]['data']);
}).catchError((err){
});
}
上门方法,如果其中一个Api出错,则就到不了then,而是直接到了catchError。
下面代码可以防止出错一个,其他依然继续,测试代码中,getDefault()是一定会跑出错误,下面看打印结果
//从网络更新最新数据
requestData() async{
if(!isLogin) return;
return Future.wait([
//then写在里面,这样保证其中一个future出错,都能执行到then
ApiUser.fullInfo().then((content) => currentUser=User.fromJson(content['data'])),
ApiAddress.getDefault().then((content) => address=Address.fromJson(content['data'])),
//ApiFinance.wallet().then((content)=>wallet=Wallet.fromJson(content['data']))
Future.delayed(Duration(seconds: 4), ()=>print("======延迟完成")),
ApiFinance.wallet().then((content)=>print('========完成wallet'))
]).then((contents){
//格式要求,这个then不能省
}).catchError((err){
print('出错了:'+err);
});
}
#调用
await requestData();
print("====完成所有");
打印结果:
========完成wallet
===出错了:getDefault()
======延迟完成
====完成所有
网友评论