函数接口防抖

copy to dartpad test;



‘’‘dart

typedef HttpRequestMethod = Future<bool> Function();

void main() {

var http = Http();

start(http,isDebounce:true);

}

var count = 0;

void start(Http http,{isDebounce = false}) async{

  if(count >= 10){

    count = 0;

    return;

  }


  print("接口访问 count:$count");

  //1.0

//  http.getRequest(isDebounce:isDebounce);


  //2.0

  http.getRequestFunction( () async{

    await Future.delayed(Duration(seconds: 1));

    print("模拟接口访问返回");

    return Future.value(true);

  } ,isDebounce:isDebounce);


  //测试sleep

  await Future.delayed(Duration(seconds: 1));


  count ++;

  return start(http,isDebounce:isDebounce);

}

class Http {


  List<String> _methods = [];



  //isDebounce version 1.0

  void getRequest({identify  = "getRequest",isDebounce = false,effectivenessTime = 5}){

    if(isDebounce){

      if(_methods.contains(identify)){

        print("被拦截");

        return;

      }

      _methods.add(identify);

    }


    Future.delayed(Duration(seconds:1),(){

      print("模拟接口访问返回 count:$count");


      Future.delayed(Duration(seconds:effectivenessTime),(){

        if(isDebounce){

          print("可进行下一次访问");

          _methods.remove(identify);

        }

      });


    });

  }


  //isDebounce version 2.0

  void getRequestFunction(HttpRequestMethod function,{identify  = "getRequestFunction",isDebounce = false,effectivenessTime = 5}) {

    if(isDebounce){

      if(_methods.contains(identify)){

        print("被拦截");

        return;

      }

      _methods.add(identify);

    }


  function().then((isFinish){


      Future.delayed(Duration(seconds:effectivenessTime),(){

        if(isFinish && isDebounce){

          print("可进行下一次访问");

          _methods.remove(identify);

        }

      });


  });


  }

}

’‘’

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,973评论 19 139
  • import 'dart:collection'; import 'dart:convert' as JSON; ...
    txaz6阅读 303评论 0 0
  • 感觉文章还行,请留下你的赞。 一、Stream 是什么? Stream 是异步数据事件的源。Stream 提供了一...
    NetWork小贱阅读 2,912评论 0 4
  • 在写这篇文章之前,我一直在犹豫,要不要在这里讲解Dart的异步相关话题,因为这部分内容很容易让初学者望而却步: 1...
    5e4c664cb3ba阅读 726评论 0 3
  • 概述 Dart的异步模型 Dart的异步操作(Future以及async、await) Dart的异步补充 一、D...
    IIronMan阅读 475评论 2 1