美文网首页
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

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