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

相关推荐
Wect16 小时前
深度解析前端性能优化
前端·面试·性能优化
|晴 天|16 小时前
AI智能助手功能实现
前端·vue.js·人工智能
2601_9495936516 小时前
Flutter OpenHarmony 三方库 path_provider 文件路径获取适配详解
flutter
历程里程碑16 小时前
55 Linux epoll高效IO实战指南
java·linux·服务器·开发语言·前端·javascript·c++
Mapmost16 小时前
【Mapmost 渲染指北】利用LUT快速构建场景色调
前端
踩着两条虫16 小时前
VTJ:核心概念
前端·低代码·ai编程
Moment16 小时前
作为前端,如果使用 Langgraph 实现第一个 Agent
前端·javascript·后端
相信神话202116 小时前
第六章:迷你项目:「投壶」单关卡小游戏
前端
晴天丨16 小时前
🔔 如何实现一个优雅的通知中心?(Vue 3 + 消息队列实战)
前端·vue.js
冰凌时空16 小时前
30 Apps 第 1 天:待办清单 App —— 数据层完整设计
前端·ios