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

相关推荐
解局易否结局2 分钟前
Flutter 跨平台开发进阶:从 Widget 思想到全栈集成
flutter
孟祥_成都11 分钟前
Prompt 还能哄女朋友!你真的知道如何问 ai 问题吗?
前端·人工智能
前端涂涂12 分钟前
第3讲:BTC-数据结构
前端
白狐_79824 分钟前
【项目实战】我用一个 HTML 文件写了一个“CET-6 单词斩”
前端·算法·html
夕水27 分钟前
React Server Components 中的严重安全漏洞
前端
sg_knight28 分钟前
SSE 技术实现前后端实时数据同步
java·前端·spring boot·spring·web·sse·数据同步
Bryce李小白33 分钟前
理解InheritedWidget概念
flutter
西西学代码33 分钟前
flutter---进度条(3)
flutter
苹果电脑的鑫鑫36 分钟前
el-select下拉菜单如何可以手输入内容
前端·vue.js·elementui
kirk_wang40 分钟前
Flutter SharedPreferences 鸿蒙端适配实践:原理、实现与优化
flutter·移动开发·跨平台·arkts·鸿蒙