JavaScript ES6 类可以与异步代码库一起使用吗?

2023-12-31

什么可以ES6 类 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes作为一种组织模式,提供异步代码。下面是一个 ES7 async/await 的例子,ES6 类可以有异步方法,或者 ES7 中的构造函数吗?

我可不可以做:

class Foo {
    async constructor() {
        let res = await getHTML();
        this.res = res
    }
}

而且,如果不是的话,构造函数应该如何工作来做到这一点?

class Foo {
    constructor() {
        getHTML().then( function (res) {
            this.res = res
        }
    }
}

如果这些模式都不起作用,ES6 中的构造函数(以及类)可以吗?class支持对对象状态进行操作的任何形式的异步性吗?或者,它们仅适用于纯同步代码库吗?上面的例子在构造函数中,但它们不需要......将问题推向下一层......

class Foo {
    myMethod () {
      /* Can I do anything async here */
    }
}

或者,用吸气剂...

class Foo {
    get myProp() {
        /* Is there any case that this is usefully asynchronous */
    }
}

我能想到的唯一例子是在同一个方法/构造函数/getter 中并行运行某些东西,但要在结论之前解决整个问题。我只是感到困惑,因为似乎所有对完全异步库的推动,这只会让事情变得混乱。除了教科书示例之外,我找不到任何有用的应用程序。


我可不可以做async constructor()

不,这是一个语法错误 - 就像constructor* ()。构造函数是一种不返回任何内容的方法(没有承诺,没有生成器),它只初始化实例。

并且,如果不是,构造函数应该如何工作来执行此操作

这样的构造函数根本不应该存在,请参阅让构造函数返回 Promise 是不好的做法吗? https://stackoverflow.com/q/24398699/1048572

ES6 类可以支持对对象状态进行操作的任何形式的异步吗?或者,它们仅适用于纯同步代码库吗?

是的,您可以使用异步方法(即使使用建议的方法)async语法)在类上,并且 getter 也可以返回 Promise。

但是,您需要决定在某些异步进程仍处于活动状态时调用方法时会发生什么。如果您希望它对所有操作进行排序,您应该将实例的状态存储在您可以链接到的序列末尾的 Promise 中。或者,如果您想允许并行操作,最好的方法是使您的实例不可变并返回另一个实例的承诺。

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

JavaScript ES6 类可以与异步代码库一起使用吗? 的相关文章

  • 是否有一种异步信号安全的方式来读取 Linux 上的目录列表?

    SUSv4 http pubs opengroup org onlinepubs 9699919799 functions V2 chap02 html tag 15 04 03 03未在其异步信号安全函数列表中列出 opendir rea
  • ES6 生成器函数中星号 (*) 的作用是什么

    有人可以向我解释一下 为什么 ES6 中的生成器函数用星号标记吗 例如 代替 function someGenerator yield 1 yield 2 yield 3 我们可以写 function someGenerator yield
  • JavaScript 将嵌套 Map 转换为对象

    我想将 es6 嵌套 Map 转换为对象 我尝试了这段代码 mapToObjectRec m let lo for let k v of m if v instanceof Map lo k this mapToObjectRec v el
  • LoaderManager 不接受“这个”

    好吧 我投降 我想不明白 我正在学习 Udacity 的 Android 基础知识课程 需要了解如何使用加载器加载数据 但是 当我使用以下行时 this 以红色突出显示并显示以下错误 Wrong 3rd argument type Foun
  • Angularjs $http 等待响应

    我是 javascript angularjs 的新手 我想在某些元素上完成鼠标悬停时显示引导弹出窗口 我为此创建了一个指令 function angular app app directive popOver window http fu
  • 如何在 javascript ES6 类中链接异步方法

    我想链接类中的方法 我对同步方法有问题 但我不知道如何用异步方法做到这一点 例如这个类 class Example constructor this val 0 async setTimeout gt this val 1 return t
  • 从数组中提取值并将其转换为字符串的最佳方法是什么(允许 ES6)?

    我正在尝试采用这样的数组 location Id 000 000 Name Foo Id 000 001 Name Bar etc 提取 Id 并将它们组合成单个字符串 同时在每个值前面附加一个静态字符串 myId 的最有效 最干净的方法是
  • Koa2 request.body 为空

    这个问题相当老了 这里使用的库很可能已经过时 解决方案仍然是正确的 但请使用最新的版本 我正在使用 koa2 和 node6 开发一个 Web 服务 我的 koa 依赖如下 koa 2 0 0 alpha 4 koa async body
  • 如何使用 C#8 IAsyncEnumerable 异步枚举并行运行的任务

    如果可能的话 我想为并行启动的任务创建一个异步枚举器 因此 首先完成的是枚举的第一个元素 第二个完成的是枚举的第二个元素 依此类推 public static async IAsyncEnumerable
  • 使用异步工作流程并行化的最佳实践

    假设我想抓取一个网页并提取一些数据 我很可能会写这样的东西 let getAllHyperlinks url string async let req WebRequest Create url let rsp req GetRespons
  • 如何检查 Map 或 Set 是否为空?

    对于 JavaScript 中的传统对象 使用以下命令很容易检查它是否为空 Object keys method const emptyObj console log Object keys emptyObj length 0 true i
  • 通过多个回调优雅地传递“点击事件”

    当未登录的用户单击给定的按钮时 我想停止该事件 收集他的 oauth 收集他的电子邮件 如果我没有 然后执行该事件 我想用 javascript 来做所有事情 因为这会让事情变得更加简单 这就是我执行它的方式 我有两个问题 有没有更优雅的方
  • JavaScript 中的 Promise 有什么意义?

    一个承诺是一个 可能现在可用 或将来可用 或永远不可用的值 来源 MDN 假设我有一个想要处理图片的应用程序 图片已加载 例如在算法在后台使用它之后 或某种其他类型的延迟 现在我想检查一下图片是否可以在future 通过使用承诺 而不是回调
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • scala play框架如何对异步控制器进行单元测试

    使用 Scala play 2 5 版并尝试遵循以下文档中的单元测试控制器指南 https www playframework com documentation 2 5 x ScalaTestingWithScalaTest https
  • 如何在 WPF 应用程序上执行异步启动?

    我在异步等待方面相当落后 所以这可能是一个 duh 问题 我正在开发一个非常小的 UI 应用程序 它使用以下命令从系统托盘运行WPF 通知图标 http www codeproject com Articles 36468 WPF Noti
  • jQuery 的同步 AJAX 请求是如何工作的?

    Does jQuery ajax async false 仍然使用 XMLHttpRequest 对象 如果是这样 请求是如何同步的 函数定义中是否有某种机制允许将 XHR 发出的异步请求包装在同步包装器中 我问这个问题是因为我想将异步函数
  • 仅当对象为真时才解构对象

    假设我想像这样解构我的函数参数 const func field subField gt subField 如果字段是 如何防止抛出错误undefined or null 您可以使用默认值 const func field subField
  • 运行“gulp”命令时出现“错误 [ERR_REQUIRE_ESM]”

    我是新来的Gulp并尝试自动化一些任务 这是我的环境设置 npm version 8 1 0 node version 17 0 1 gulp CLI version 2 3 0 and gulp version 4 0 2 这是我的gul
  • 没有什么等待吗?使用空的等待来分解大型同步函数

    我有一个相当简单的问题 但找不到答案 我有一个名为的异步函数foo它永远不会等待 因此它是同步运行的 在foo是一个长时间运行的循环 它将大量数据推送到中间缓冲区中 有一个使用 RxJS 的异步操作 它将从该缓冲区中提取和处理数据 但直到我

随机推荐

  • 如何在iOS自动布局中动态更改字体大小?

    我想将我的文字放入UILabel 但对于不同的 iPhone 尺寸UILabel正在改变 因为我正在使用自动布局 但我无法修复字体大小 所以我的文本被剪掉了 有什么方法可以设置任何约束以使文本适合UILabel动态地 看到这里 由于屏幕分辨
  • 为什么 UserPrincipal.FindByIdentity 返回有关 GUID 为 32 位的错误?

    我的应用程序使用UserPrincipal类来确定用户属于哪些组 然后使用该信息来确定用户是否经过身份验证才能使用我的应用程序 有一段时间一切都很好 但最近我开始遇到异常 Guid 应包含 32 位数字和 4 个破折号 xxxxxxxx x
  • SQL 和 C# 中两个日期计算之间的日期差异产生不同的结果

    我正在计算两个日期的日差 在 C 中 diffdays EndDate StartDate Days 因此 考虑到结束日期为 6 26 2015 开始日期为 6 10 2015 diffdays 值为 15 如调试时的 自动 部分所示 在
  • 在 WordPress 中缓存自定义社交分享计数

    我真的很喜欢有一个股票柜台在我的博客文章上 我注意到它实际上鼓励访问者自己分享内容 因为没有真正令我满意的 WordPress sharecount 插件 其中大多数都需要大量调用 所以我自己编写了代码 它工作完美 但仍然减慢了我的网站速度
  • JavaScript - 我如何了解“闭包”的用法?

    维基百科 自由的百科全书 闭包 计算机科学 在计算机科学中 闭包是 在中评估的函数 环境包含一个或多个 绑定变量 当被调用时 函数可以访问这些变量 闭包的显式使用是 与函数式编程相关 以及诸如 ML 和 口齿不清 诸如以下对象的构造 其他语
  • 在 Electron 中处理表单的正确方法是什么?

    表单 html 和提交事件是 渲染器 的一部分 提交的数据应该在主流程中可用 提交表单并使数据可在 main js 中访问的正确方法是什么 我应该简单地使用 远程 模块将数据传递到 main js 中的函数还是有更好的方法 我们使用服务 A
  • MySql中如何使用触发器制作外键

    我想使用触发器在MySql中创建外键 我有以下表格 1 内容 表 教师 ID varchar 20 子 ID varchar 20 路径 varchar 100 文件名 varchar 100 2 老师 表 教师 ID varchar 20
  • 如何向我的班级用户表明验证要求?

    我正在实现一个类 该类使用非常严格定义的模式封装 xml 文档 我不控制架构 类中的属性之一用于模式指示必须与特定正则表达式匹配的元素值 在属性的设置器中 如果字符串与表达式不匹配 我将引发异常 我的问题是 如何才能更好地向我班级的用户传达
  • 如何将 Visual Studio 2019 中的 .NET 版本更改为 .NET Framework 4.7.2?

    我怎样才能将 NET更改为 NET Framework 4 7 2 我已经两天了 真的很挣扎 我正在做一个 WinFormApp 只能使用 NET 5 或 NET Core 3 1 但我需要 NET Framework 4 7 2 作为另一
  • 反应式闪亮模块共享数据

    我正在尝试使用模块创建一个闪亮的应用程序 两个数据帧 表 a 和 b 是反应性的并且可以修改 第三个数据帧 表 c 也是反应性的并且基于表 a 和 b 我尝试按照这个question https stackoverflow com ques
  • PayPal IPN 意外变化

    从 2017 年 3 月 8 日左右开始 我们注意到一些 不是全部 PayPal IPN 出现了一些异常行为 PayPal 似乎正在推出某种变化 还有一些其他人报告了其他事情 例如 PayPal 从 IPN 端点中删除的 QueryStri
  • std::unordered_set 元素的迭代顺序是否保证始终相同?

    如果迭代的元素std unordered set多次而不更改集合的内容 但可能从中读取 计算其大小等 是否保证每次都会以相同的顺序访问元素 在你提到的具体情况下 是的 因为该标准明确规定了何时进行重新散列 并因此重新排序 它仅在插入期间发生
  • C# Random 不像 random 那样工作

    我有一个图 每个节点有 4 个子节点 我编写了一个算法来生成从开始节点到结束节点的随机路径 在每个节点 它选择一个随机的下一个节点 访问过的节点可以重新访问 代码如下 public List
  • Cuda 中未找到 HANDLE_ERROR 错误

    global void add int a int b int c c a b int main void int c int dev c HANDLE ERROR cudaMalloc void dev c sizeof int add
  • Sunspot / Solr / Rails:模型关联未在索引中更新

    我的应用程序中有一个 Fieldnote 模型 它通过名为 fieldnote activities 的表附加了 many activities 然后我这样定义一个可搜索索引 searchable auto index gt true au
  • 如何让 ASP.NET Web API(自托管)在 *仅* 本地主机上侦听?

    我正在按照这个例子here http www dotnetcurry com ShowArticle aspx ID 896用于自托管 ASP NET Web API 服务 但是 当在基地址中指定 localhost 作为主机时 它会被转换
  • 系列的第 n 项

    我们必须找到这个级数的第n项http oeis org A028859 http oeis org A028859 n 答案应该以 1000000007 为模 我已经编写了代码 但是当 n a 是一个巨大的数字时 时间限制就超出了 incl
  • 其他同步方法

    除了使用synchronized关键字之外 如何在java中同步方法 你可以使用java util concurrent locks封装 特别是Lock接口 Lock l l lock try access the resource pro
  • 在图像控制中以 5 秒时间间隔显示文件夹中的所有图像

    我有一个包含 1000 张图像的文件夹 图像名称的顺序为 ICON000 ICON001 直到 ICON 999 我需要它们以 5 秒的时间延迟按顺序显示在我的 WPF 图像控件中 我使用文件对话框来获取特定文件夹的路径和图像的相应前缀 图
  • JavaScript ES6 类可以与异步代码库一起使用吗?

    什么可以ES6 类 https developer mozilla org en US docs Web JavaScript Reference Classes作为一种组织模式 提供异步代码 下面是一个 ES7 async await 的