美文网首页
Future.wait

Future.wait

作者: 晓函 | 来源:发表于2022-03-05 18:44 被阅读0次

同时获取多个内容,并且一起完成后返回

  //从网络更新最新数据
  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()
======延迟完成
====完成所有

相关文章

  • Future.wait

    同时获取多个内容,并且一起完成后返回 上门方法,如果其中一个Api出错,则就到不了then,而是直接到了catch...

  • flutter 同时执行多个异步请求回调

    flutter中提供了Future.wait()函数,可以在执行多个异步请求之后有一个统一的回调结果,但是劣势在于...

网友评论

      本文标题:Future.wait

      本文链接:https://www.haomeiwen.com/subject/kjebrrtx.html