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

相关推荐
漂流瓶jz7 小时前
BEM、OOCSS、SMACSS、ITCSS、AMCSS、SUITCSS:CSS命名规范简介
前端·css·代码规范
陈随易11 小时前
真的,你可以不用TypeScript
前端·后端·程序员
郑州光合科技余经理12 小时前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
唐璜Taro12 小时前
Vue3 + TypeScript 后台管理系统完整方案
前端·javascript·typescript
dustcell.12 小时前
haproxy七层代理
java·开发语言·前端
掘金酱13 小时前
「寻找年味」 沸点活动|获奖名单公示🎊
前端·人工智能·后端
患得患失94913 小时前
【前端】前端动画优化的核心
前端
Xin_z_13 小时前
Vue3 + Sticky 锚点跳转被遮挡问题解决方案
前端·javascript·vue.js
MakeZero13 小时前
Flutter那些事-布局篇
flutter
REDcker13 小时前
WebCodecs VideoDecoder 的 hardwareAcceleration 使用
前端·音视频·实时音视频·直播·webcodecs·videodecoder