flutter 中实现前端的promise

代码如下

Dart 复制代码
typedef Callback = Function(
  Function([dynamic value]) resolve,
  Function(Exception error) reject,
);

class Promise {
  Promise();
  static Future<T?> run<T>([
    Callback? callback,
  ]) async {
    final completer = Completer<T>();
    //
    resolve([value]) {
      return completer.complete(value);
    }

    //
    reject(Exception exception) {
      completer.completeError(exception);
    }

    if (callback != null) {
      await callback(resolve, reject);
    } else {
      completer.complete();
    }
    return completer.future;
  }

  static Future<T?> resolve<T>([T? value]) async {
    await Future.delayed(Duration.zero);
    return value;
  }

  static Future<T> reject<T extends Exception>(T value) async {
    await Future.delayed(Duration.zero);
    throw value;
  }
}

使用方法

Dart 复制代码
 final promise = Promise.run((resolve, reject) {
      resolve("finally");
    });

核心原理是

利用Future 和Completer。 Future 是异步无状态的 Completer可以返回Future 里面有3种状态

组合一下 就是前端的promise

用法改了一下 使用 Promise.run =》Promise

相关推荐
w1395485642219 小时前
Flutter跨平台路径解析鸿蒙化使用指南
flutter·华为·harmonyos
ResponseState20019 小时前
安卓原生写uniapp插件手把手教学调试、打包、发布。
前端·uni-app
颜酱19 小时前
SourceMap 深度解析:从映射原理到线上监控落地
前端·javascript
LYOBOYI12319 小时前
qt的事件传播机制
java·前端·qt
IT_陈寒19 小时前
Python 3.12 性能优化:5 个鲜为人知但提升显著的技巧让你的代码快如闪电
前端·人工智能·后端
爸爸61919 小时前
Flutter UDID 在鸿蒙平台的使用指南
flutter·华为·harmonyos
军军君0119 小时前
Three.js基础功能学习二:场景图与材质
前端·javascript·学习·3d·材质·three·三维
Komorebi゛20 小时前
【Vue3 + Element Plus】Form表单按下Enter键导致页面刷新问题
前端·javascript·vue.js
踢球的打工仔20 小时前
typescript-基本类型
前端·javascript·typescript
dly_blog20 小时前
Vue 组件通信方式大全(第7节)
前端·javascript·vue.js