Typescript:Promise 的子类/扩展:不引用 Promise 兼容的构造函数值

2023-11-27

我正在尝试取消我的asyncTypescript 中的方法调用。

为此,我创建了一个新的 Promise 类型,它继承自Promise:

class CancelablePromise<T> extends Promise<T>{

    private cancelMethod: () => void;
    constructor(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void, cancelMethod: () => void) {
        super(executor);
        this.cancelMethod = cancelMethod;
    }

    //cancel the operation
    public cancel() {
        if (this.cancelMethod) {
            this.cancelMethod();
        }
    }
}

但是当我尝试使用它时:

async postFileAjax<T>(file: File): CancelablePromise<T> { ... }

我收到错误:

错误 Build:Type 'typeof CancelablePromise' 不是 ES5/ES3 中的有效异步函数返回类型,因为它不引用 Promise 兼容的构造函数值。

如果我使用类型声明并返回CancelablePromise,像这样然后编译:

async postFileAjax<T>(file: File): Promise<T>  { 
     ...
     return CancelablePromise(...);
}

我究竟做错了什么?我发现在 ES6 中你可以子类化Promise (see 堆栈溢出问题),所以我希望它也能在 TypeScript 中出现。

使用 Typescript 2.1 并针对 es5


错误消息一开始对我来说并不完全清楚,但是构造函数的签名应该是完全一样作为构造函数Promise.

我已经删除了cancelMethod来自构造函数并稍后设置它。这有效:

class CancelablePromise<T> extends Promise<T>{

    public cancelMethod: () => void;
    constructor(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void) {
        super(executor);

    }

    //cancel the operation
    public cancel() {
        if (this.cancelMethod) {
            this.cancelMethod();
        }
    }
}

并致电:

async postFileAjax<T>(file: File): CancelablePromise <T> { 

    var promiseFunc = (resolve) => { resolve() };
    var promise = new CancelablePromise<T>(promiseFunc);
    promise.cancelMethod = () => { console.log("cancel!") };

    return promise;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript:Promise 的子类/扩展:不引用 Promise 兼容的构造函数值 的相关文章

随机推荐

  • CSS - border-radius 在 IE6/7/8 中不显示

    我使用以下 CSS 在我的 DIV 上实现圆角边框 border 1px solid 999 border radius 6px ms border radius 6px moz border radius 6px webkit borde
  • 使用c# selenium webdriverWait wait.untill()函数时忽略异常

    为了检查元素是否存在并且可点击 我尝试编写一个布尔方法 该方法将等待元素启用并使用 C selenium webDriverWait 显示 如下所示 webDriverWait wait new webDriverWait driver t
  • 按值对哈希表进行排序

    如果我有一个哈希表 并且我想按值对其进行排序 即 按降序排列的整数 我怎样才能做到这一点并能够打印所有键值对 传输为列表并排序 public static void sortValue Hashtable
  • 关于范围的变量的最佳声明

    我问这个问题主要是关于 C 编程 但欢迎对任何语言的见解 当谈到 C 时 我知道它只允许变量声明出现在代码块的最开始处 我的印象是 应该在函数的一开始就声明函数中要使用的所有变量 但在很多情况下 我都会有一个仅在循环 或类似块 中使用的变量
  • C# 引用变量的内存分配

    有谁知道创建引用类型变量时占用了多少内存 字符串 s 123 s 作为引用 而不是指向它的数据 会占用多少内存 这可以按以下方式细分 String s 123 变量s 这将消耗当前架构上的本机指针大小 如果操作系统是 32 位或进程在 Wo
  • 如何使用 PHP 检测爬虫/蜘蛛?

    如何使用 PHP 检测爬虫 蜘蛛 我目前正在开发一个项目 需要跟踪每个爬虫的访问情况 我知道您应该使用 HTTP USER AGENT 但我不太确定如何为此目的格式化代码 并且我知道 USER AGENT 可以很容易地更改 所以我还想知道是
  • 如何强制 Java 子类定义 Annotation?

    如果一个类定义了一个注释 是否可以强制其子类定义相同的注释 例如 我们有一个简单的类 子类对 它们共享 Author interface 我想做的是强制每个进一步的子类定义相同的 Author注释 防止RuntimeException沿着路
  • 如何使用 SAM 部署来获取 lambda,以及 AutoPublishAlias 和其他别名

    我的目标是额外SAM deploy调用将导致 staging 别名反映最新版本 并且 live 将通过外部方式更新 但必须初始化为部署时创建的相同版本 我正在使用 SAM 部署 并且需要 lambda 上的别名 在初始模板中添加它们很棘手
  • 刷新片段不再起作用?

    今天我损失了几个小时 因为我的代码不再工作 更新到新版本的支持库 25 1 0 后 重新加载片段视图的代码不再起作用 这是我的代码 FragmentManager manager getActivity getSupportFragment
  • 使用 Pyramid 对所有 HTTP 流量进行压缩

    我正在创建基于金字塔框架的移动服务 因为它是移动的 所以减少带宽使用是有利的 我正在考虑压缩所有流量 甚至是动态 HTML 页面 Pyramid 框架为此提供了什么样的钩子 或者是否有用于该任务的 WSGI 中间件 我仍然想在 Python
  • 使用分治法从给定列表中查找第二小的数字

    我正在努力解决这个问题 给定一个包含 n 个数字的列表 我们希望找到最小的和第二小的 列表中的数字 描述一个分而治之的算法来解决这个问题 假设整数 k 为 n 2 k 使用您的算法的比较次数应该 即使在最坏的情况下 也不会超过 3n 2 2
  • WinForms - 哪种是保存某些数据最简单的方法?

    刚刚构建我的第一个 WinForms 应用程序 问题 在使用应用程序之间保存一些数据的最简单 最佳方法是什么 例如 在本例中包含状态和日期 时间的 URL 列表 我认为不需要数据库 例如 仅仅存储到文本文件是最简单的吗 或者在 DotNet
  • UseWindowsAzureActiveDirectoryBearerAuthentication 如何验证令牌?

    我按照下面的 GitHub 示例来实现跨 WebApp 和 WebApi 的身份验证机制 https github com AzureADSamples WebApp WebAPI OpenIDConnect DotNet 我正在为 Web
  • Angular 圆形模块导入

    我有两个模块 其组件相互使用 所以我必须在 test 中导入 word 在 word 中导入 test gt 抛出错误 我该怎么办 模块 测试 NgModule declarations AppTest1Component AppTest2
  • Websphere 所有日志都将转到 SystemOut.log

    我在我的应用程序中使用 Log4j 并有一些用于调试和错误的附加程序 我在tomcat上测试过 工作正常 在各自的文件中生成所有日志 但是当我在 WAS6 1 上部署代码时 所有日志仅在 SystemOut log 内生成 请帮忙 问题可能
  • VS 11 Beta 无法启动进程,因为尚未提供文件名

    这是我构建测试项目时得到的结果 这样我就无法运行我的测试 因为 VS 没有发现它们 查看留言 Unexpected error detected Check the Tests Output Pane for details 在窗口底部 现
  • 我怎样才能让 gitbash 找到 javac 命令?

    我创建了我的 git 存储库并提交了它 插入一个java文件并想要编译它 但它给了我这个 Bernard BERNARD PC c users bernard desktop git2 master javac TestGUI java s
  • Clang 链接器问题(从源代码到 gcc-snapshot)

    我似乎无法让它发挥作用 我配置了 with gcc toolchain 在 equals 之后我把 gcc 所在的目录 usr lib gcc snapshot bin 我还查看了 clang 链接器问题 但我不知道如何获得接受的答案来找到
  • Volley Android 网络库

    关于在我的项目中使用 Volley 我有几个问题 这个库可以在任何 Java 项目中使用还是只能在 Android 项目中使用 我看到多个分支here并且没有关于从哪个分支开始的文档 我应该从哪个分支开始 您如何将该库集成到您自己的项目中
  • Typescript:Promise 的子类/扩展:不引用 Promise 兼容的构造函数值

    我正在尝试取消我的asyncTypescript 中的方法调用 为此 我创建了一个新的 Promise 类型 它继承自Promise class CancelablePromise