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

相关推荐
爱上妖精的尾巴6 分钟前
8-8 WPS JS宏 正则表达式 字符组与任选
java·服务器·前端
山岚的运维笔记20 分钟前
SQL Server笔记 -- 第34章:cross apply
服务器·前端·数据库·笔记·sql·microsoft·sqlserver
不爱吃糖的程序媛27 分钟前
Flutter 定位插件 flutter_z_location 适配 OpenHarmony 全流程实战
flutter
前端程序猿i1 小时前
第 8 篇:Markdown 渲染引擎 —— 从流式解析到安全输出
开发语言·前端·javascript·vue.js·安全
coding随想1 小时前
告别构建焦虑!用 Shoelace 打造零配置的现代 Web 应用
前端
css趣多多1 小时前
resize.js
前端·javascript·vue.js
_codemonster1 小时前
java web修改了文件和新建了文件需要注意的问题
java·开发语言·前端
小冰球1 小时前
前端侦探:我是如何挖掘出网站里 28 个"隐藏商品"的?
前端·vue.js
3秒一个大1 小时前
深入解析 React 回到顶部(BackToTop)组件的实现与设计
前端·react.js·typescript
大时光1 小时前
gsap 配置解读 --1
前端