前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dart、JavaScript 的一些代码啊啊啊啊啊~

Dart、JavaScript 的一些代码啊啊啊啊啊~

作者头像
老猫-Leo
发布2023-12-11 21:03:01
1620
发布2023-12-11 21:03:01
举报
文章被收录于专栏:前端大全前端大全

投石击水,不起浪花,也泛涟漪。

Dart

Call 事件派发与监听

代码语言:javascript
复制
class Call {
  Call._internal() {
    // 构建单例,也可直接将 _callBackMap 变为静态成员,代码简洁,但是暴露了 _callBackMap。
  }

  static final Call _instance = Call._internal();

  Map<String, List<Function>> _callBackMap = new Map<String, List<Function>>();

  static bool hasCallBack(String eventKey, Function callback) {
    if (_instance._callBackMap[eventKey] == null) {
      return false;
    }
    return _instance._callBackMap[eventKey].contains(callback);
  }

  static void addCallBack(String eventKey, Function callback) {
    if (_instance._callBackMap[eventKey] == null) {
      _instance._callBackMap[eventKey] = [];
    }
    if (!hasCallBack(eventKey, callback)) {
      _instance._callBackMap[eventKey].add(callback);
    }
  }

  static void removeCallBack(String eventKey, Function callback) {
    if (_instance._callBackMap[eventKey] == null) {
      return;
    }
    _instance._callBackMap[eventKey].removeWhere((callBackFunc) => callBackFunc == callback);
  }

  static void dispatch(String eventKey, {var data}) {
    if (_instance._callBackMap[eventKey] == null) {
      throw Exception('未找到回调事件 $eventKey 的监听');
    }
    _instance._callBackMap[eventKey].forEach((callBackFunc) {
      callBackFunc?.call(data);
    });
  }
}

/* ---------- */

void main() {
  Call.addCallBack('test', (data) {
    print('test1$data');
  });
  var test = (data) {
    print('test2$data');
  };
  Call.addCallBack('test', test);
  Call.dispatch('test', data: '123');
  print('hasCallBack-test${Call.hasCallBack('test', test)}');
  Call.removeCallBack('test', test);
  Call.dispatch('test');
  Call.dispatch('test-not');
}

防抖

代码语言:javascript
复制
Function debounce(
  Function func, [
  int delay = 2000,
]) {
  if (func == null) {
    return () {
      print('func is null');
    };
  }
  Timer timer;
  Function target = () {
    if (timer?.isActive ?? false) {
      timer?.cancel();
    }
    timer = Timer(Duration(milliseconds: delay), () {
      func?.call();
    });
  };
  return target;
}

/* ---------- */

void main() async {
  print("Hello, World0!");
  var test = debounce(() {
    print("Hello, World1!");
  }, 5000);
  test();
  await Future.delayed(Duration(milliseconds: 1000));
  test();
  await Future.delayed(Duration(milliseconds: 1000));
  test();
  print("Hello, World2!");
}
// 最后一次才有效,7s多打印一次 Hello, World1!。

节流

代码语言:javascript
复制
Function throttle(
  Function func, [
  int delay = 2000,
]) {
  if (func == null) {
    return () {
      print('func is null');
    };
  }
  bool enable = true;
  Function target = () async {
    if (enable == true) {
      enable = false;
      func?.call();
      await Future.delayed(Duration(milliseconds: delay));
      enable = true;
    }
  };
  return target;
}

/* ---------- */

void main() async {
  print("Hello, World0!");
  var test = throttle(() {
    print("Hello, World1!");
  }, 5000);
  test();
  await Future.delayed(Duration(milliseconds: 1000));
  test();
  await Future.delayed(Duration(milliseconds: 1000));
  test();
  print("Hello, World2!");
}
// 第一次才有效,严格意义立即打印一次 Hello, World1!。

http-dao

代码语言:javascript
复制
Future fetch() async {
  String getUrl = 'http://localhost:888';
  final Map<String, String> header = {'Content-type': 'application/json', 'authorization': 'Bearer test'};
  var response;
  try {
    response = await http.get(Uri.parse(getUrl), headers: header);
  } catch (e) {
    // ERROR
  }
  Utf8Decoder utf8decoder = Utf8Decoder();
  var result = json.decode(utf8decoder.convert(response.bodyBytes));
  if (response.statusCode == 200 || result['code'] == '0') {
    // Success
  } else {
    // Failed
  }
}

Base64

代码语言:javascript
复制
String base64StrEncode(String sourceStr) {
  List<int> bytes = utf8.encode(sourceStr);
  String encodeStr = base64Encode(bytes);
  return encodeStr;
}

String base64StrDecode(String encodedStr) {
  List<int> bytes = base64Decode(encodedStr);
  // String decodeStr = String.fromCharCodes(bytes);
  String decodeStr = utf8.decode(bytes);
  return decodeStr;
}

JavaScript

Call 事件派发与监听

代码语言:javascript
复制
export default class Call {
  private static instance: Call;

  private constructor() { } // 不能初始化

  /**
   * 获取 Call 单例
   * @returns 
   */
  static getInstance(): Call {
    if (!this.instance) {
      this.instance = new Call();
    }
    return this.instance;
  }


  private _callBackMap: { [key: string]: Function[] } = {};

  static hasCallBack(eventKey: string, callBack: Function): boolean {
    if (!Call.getInstance()._callBackMap[eventKey]) {
      return false;
    }
    return Call.getInstance()._callBackMap[eventKey]?.includes(callBack) ?? false;
  }

  static addCallBack(eventKey: string, callback: Function): void {
    if (!Call.getInstance()._callBackMap[eventKey]) {
      Call.getInstance()._callBackMap[eventKey] = [];
    }
    if (!Call.hasCallBack(eventKey, callback)) {
      Call.getInstance()._callBackMap[eventKey]?.push(callback);
    }
  }

  static removeCallBack(eventKey: string, callback: Function): void {
    if (!Call.getInstance()._callBackMap[eventKey]) {
      return;
    }
    Call.getInstance()._callBackMap[eventKey] = Call.getInstance()._callBackMap[eventKey]?.filter((callBackFunc) => callBackFunc != callback);
  }

  static dispatch(eventKey: string, ...args: any) {
    if (!Call.getInstance()._callBackMap[eventKey]) {
      throw new Error(`未找到回调事件 ${eventKey} 的监听`);
    }
    Call.getInstance()._callBackMap[eventKey].forEach((callBackFunc) => {
      callBackFunc?.apply(this, args);
    });
  }
}

/* ---------- */

Call.addCallBack('test', function () {
  console.log('test1', arguments);
});
var test = function (data1, data2) {
  console.log('test2', data1, data2);
};
Call.addCallBack('test', test);
Call.dispatch('test', 123, 456);
console.log(
  'hasCallBack-test',
  Call.hasCallBack('test', test),
  Call.hasCallBack('test', () => {})
);
Call.removeCallBack('test', test);
Call.dispatch('test');
Call.dispatch('test-not');

防抖

代码语言:javascript
复制
function debounce(fn, delay = 2000) {
  let timer = null;
  return function () {
    clearTimeout(timer);
    timer = setTimeout(function () {
      fn.apply(this, arguments);
    }, delay);
  };
}

/* ---------- */

async function testFunc() {
  console.time('x');
  console.log('Hello, World0!');
  var test = debounce(function () {
    console.log('Hello, World1!');
    console.timeEnd('x');
  }, 5000);
  test();
  await new Promise((resolve) => {
    setTimeout(() => resolve(), 1000);
  });
  test();
  await new Promise((resolve) => {
    setTimeout(() => resolve(), 1000);
  });
  test();
  console.log('Hello, World2!');
}
testFunc();
// 最后一次才有效,7s多打印一次 Hello, World1!。

节流

代码语言:javascript
复制
function throttle(fn, delay = 2000) {
  let canRun = true;
  return function () {
    if (!canRun) return;
    canRun = false;
    fn.apply(this, arguments);
    setTimeout(function () {
      canRun = true;
    }, delay);
  };
}

/* ---------- */

async function testFunc() {
  console.time('x');
  console.log('Hello, World0!');
  var test = throttle(function () {
    console.log('Hello, World1!');
    console.timeEnd('x');
  }, 5000);
  test();
  await new Promise((resolve) => {
    setTimeout(() => resolve(), 1000);
  });
  test();
  await new Promise((resolve) => {
    setTimeout(() => resolve(), 1000);
  });
  test();
  console.log('Hello, World2!');
}
testFunc();
// 第一次才有效,严格意义立即打印一次 Hello, World1!。

fetch/ajax/axios/XHR

代码语言:javascript
复制
/* ----- Ajax ----- */
$.ajax({
  url: '/test',
  success: function (result) {
    console.log(result);
  }
});

$.ajax({
  url: '/test',
  method: 'POST',
  success: function (result) {
    console.log(result);
  }
});

$.ajax({
  url: '/test',
  data: { a: 10 },
  success: function (result) {
    console.log(result);
  },
  error: function (xhr, status, error) {
    console.log(error);
  }
});

$.ajax({
  url: '/test',
  headers: { contentType: 'application/json' },
  method: 'POST',
  data: JSON.stringify({ a: 10 }),
  success: function (result) {
    console.log(result);
  }
});

$.get(url, data, callback); // querystring
$.post(url, data, callback); // x-www-form-urlencoded




/* ----- Fetch ----- */
fetch(url, {
  headers: {
    'content-type': 'application/x-www-form-urlencoded'
  },
  method: 'POST',
  body: 'a=1&b=2&c[]=a&c[]=b'
})
  .then((res) => res.json())
  .then((data) => console.log(res))
  .catch((e) => {});

fetch(url, {
  headers: {
    'content-type': 'application/json'
  },
  method: 'POST',
  body: JSON.stringify({ a: 100 })
})
  .then((res) => res.json())
  .then((data) => console.log(res))
  .catch((e) => {});



/* ----- Axios ----- */
axios({
  url: 'http://localhost',
  method: 'POST',
  data: { a: 1 }
}).then((res) => console.log(res.data));

axios({
  url: 'http://localhost',
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  data: 'a=1&b=2&c[]=a&c[]=b'
}).then((res) => console.log(res.data));

axios.post(url, data).then(callback);



/* ----- XHR-XMLHttpRequestAjax ----- */
function XMLHttpRequestAjax(method, url, callback, data, flag) {
  var xhr;
  flag = flag || true;
  method = method.toUpperCase();
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } else {
    xhr = new ActiveXObject('Microsoft.XMLHttp');
  }
  xhr.onreadystatechange = function () {
    if (xhr.readyState == 4 && xhr.status == 200) {
      callback(xhr.responseText);
    }
  };

  if (method == 'GET') {
    var date = new Date(),
      timer = date.getTime();
    xhr.open('GET', url + '?' + data + '&timer' + timer, flag);
    xhr.send();
  } else if (method == 'POST') {
    xhr.open('POST', url, flag);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send(data);
  }
}

Base64

代码语言:javascript
复制
static base64Encode(str: string): string {
  return Buffer.from(str, 'utf-8').toString('base64');
}

static base64Decode(str: string): string {
  return Buffer.from(str, 'base64').toString('utf8');
}
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Dart
    • Call 事件派发与监听
      • 防抖
        • 节流
          • http-dao
            • Base64
            • JavaScript
              • Call 事件派发与监听
                • 防抖
                  • 节流
                    • fetch/ajax/axios/XHR
                      • Base64
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                      http://www.vxiaotou.com