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

相关推荐
chengpei147几秒前
chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确
java·前端·chrome·spring boot·json
我命由我123459 分钟前
NPM 与 Node.js 版本兼容问题:npm warn cli npm does not support Node.js
前端·javascript·前端框架·npm·node.js·html5·js
每一天,每一步19 分钟前
react antd点击table单元格文字下载指定的excel路径
前端·react.js·excel
浪浪山小白兔19 分钟前
HTML5 语义元素详解
前端·html·html5
小魔女千千鱼41 分钟前
【真机调试】前端开发:移动端特殊手机型号有问题,如何在电脑上进行调试?
前端·智能手机·真机调试
16年上任的CTO41 分钟前
一文大白话讲清楚webpack基本使用——11——chunkIds和runtimeChunk
前端·webpack·node.js·chunksid·runtimechunk
Orange30151142 分钟前
【自己动手开发Webpack插件:开启前端构建工具的个性化定制之旅】
前端·javascript·webpack·typescript·node.js
ZoeLandia1 小时前
从前端视角看设计模式之行为型模式篇
前端·设计模式
allanGold1 小时前
【flutter版本升级】【Nativeshell适配】nativeshell需要做哪些更改
flutter·nativeshell
securitor1 小时前
【java】IP来源提取国家地址
java·前端·python