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

相关推荐
carry杰13 小时前
nacos bootstrap.yml 动态配置开发测试线上模式
前端·bootstrap·html
少年张二狗13 小时前
Vue + Element-UI 图片上传实现拖拽排序功能
前端·vue.js·ui
L、21813 小时前
Flutter + OpenHarmony + 区块链:构建去中心化身份认证系统(DID 实战)
flutter·华为·去中心化·区块链·harmonyos
我又来搬代码了13 小时前
【Android】【Compose】Compose知识点复习(一)
android·前端·kotlin·android studio
哆啦A梦158813 小时前
【vue实战】商城后台管理系统 01 项目介绍
前端·javascript·vue.js
西西学代码14 小时前
Flutter---右滑显示删除按钮
flutter
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ14 小时前
java实现登录:多点登录互踢,30分钟无操作超时
java·前端
一字白首14 小时前
Vue Router 进阶,声明式 / 编程式导航 + 重定向 + 404 + 路由模式
前端·javascript·vue.js
广州华水科技14 小时前
单北斗变形监测在水库安全中的应用与维护该如何实施?
前端