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

相关推荐
_.Switch9 分钟前
Python Web 与物联网(IoT)集成与实时数据处理
开发语言·前端·python·物联网·架构·log4j
霍金的微笑42 分钟前
MYSQL(学习笔记)
java·前端·数据库
软糖工程0011 小时前
XML简介
xml·前端·学习
Clarca1 小时前
Vue源码探究虚拟DOM
前端·javascript·vue.js·ecmascript
小小李程序员2 小时前
CSS实现磨砂玻璃效果
前端·css
java—大象2 小时前
基于JavaWeb开发的Java+SpringMvc+vue+element实现驾校管理系统详细设计
java·前端·vue.js·spring boot·mybatis·课程设计
fishmemory7sec2 小时前
electron介绍
前端·javascript·electron
Passion不晚2 小时前
Java 全栈开发中的最佳实践:从前端到后端的完整流程
java·前端·全栈
Moon里4 小时前
【CSS】字体文本
前端·css
Jonathan Star8 小时前
两个圆形 一个z里面一个z外面,z里面的大,颜色不同 html
前端·html