AngularJs $q 承诺与 async/await 兼容吗?

2024-03-20

我正在使用 TypeScript(版本分别为 9.07、1.5.11 和 3.7.5)开发 Angular/AngularJs 混合应用程序。我们所有的 HTTP 请求,甚至是由新的 Angular 组件发出的请求,都使用以纯 Javascript 实现的包装服务,该服务最初是与应用程序的“遗留”AngularJs 端一起开发的,其方法返回由 AngularJs $http 生成的 $q 承诺服务。由于该服务是纯 Javascript,因此输入返回值不是问题,因为 TypeScript 认为它们只是一个any,非常高兴让我扮演IPromise<TReturnType>.

我的问题是这些承诺是否完全符合async and awaitTypeScript 中的关键字。使用简单的示例进行尝试似乎效果很好,但我担心一些极端情况的问题,这些问题只会在运行时使用带有非本机 Promise 的关键字时出现。


兼容性async这不是问题,因为该关键字并不直接依赖于现有的 Promise 实例:它使相应的函数返回一个新创建的 EcmaScript Promise 对象。

If an async函数返回一个 thenable,那么返回的本机 Promise 将根据该 thenable 进行解析。

您可以在这段代码中看到后一种效果:

async function test() {
    let thenable = { then: cb => cb(13) };
    return thenable;
}

let result = test();
console.log(result instanceof Promise);
result.then(console.log); // 13

The await关键字可以与返回 thenable 的表达式一起使用,因此在这种情况下也不需要具有 EcmaScript 兼容的 Promise:

async function test() {
    let thenable = { then: cb => cb(13) };
    let value = await thenable;
    console.log(value); // 13
}

test();

所以总而言之,两个关键字都会识别 thenable 并按预期处理它。不要求 thenable 是原生 Promise 的实例。

Surely $q承诺是可以实现的,所以这很好。

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

AngularJs $q 承诺与 async/await 兼容吗? 的相关文章

随机推荐

  • 编译错误:Lambda 目标类型交集类型

    public class X Object o I J gt interface I public void foo interface J public void foo public void bar Oracle 编译器抛出错误 X
  • WCF服务路由,瓶颈?

    我们的应用程序服务器体系结构经过设置 以便每个服务调用都经过自定义构建的 WCF 服务路由器 一个使用请求消息标头中嵌入的信息将传入请求分发到适当服务的服务 我们在使用此 WCF 服务路由器时遇到性能问题 对并发用户进行负载测试时超时 我们
  • WinRT 中的应用程序间通信

    Windows 8 上有两个 WinRT 应用程序 C Xaml 如果有的话 第一个应用程序应该接收一些数据并将其发送到第二个应用程序中 最好的方法是什么 可以使用WCF吗 编辑 第一个应用程序知道第二个应用程序 实际上第二个应用程序是一个
  • 使用 JDBC 进行批量插入的有效方法

    在我的应用程序中 我需要进行大量插入 它是一个 Java 应用程序 我使用普通 JDBC 来执行查询 数据库是Oracle 不过 我启用了批处理 因此它节省了执行查询的网络延迟 但查询作为单独的 INSERT 串行执行 insert int
  • 模拟来自developer.sandbox.com的recurring_ payment_skipped IPN

    当定期付款失败时 我需要模拟 IPN 然后 我的应用程序可以创建待处理发票并将其发送给客户 我搜索并发现我需要设置将在下面处理的 IPNtxn type recurring payment skipped recurring payment
  • 验证货币输入的最佳方法?

    我创建了 TextBox 和 CompareValidator 我认为它们将允许以下形式的输入 5 5 00 5 00 不幸的是 它不允许带有美元符号的版本 如果不允许美元符号 那么对货币进行类型检查有什么意义呢 有没有办法允许这个符号
  • 如何对总和为 100% 的一组数字进行四舍五入

    今天 我的一位朋友向我展示了网站上的一个错误 Link http img594 imageshack us img594 7605 mrul png 您可以看到百分比之和为 100 1 49 20 7 10 9 7 5 5 7 100 1
  • JQuery 验证未验证

    我正在尝试使用 JQuery 验证器插件来验证 Rails 应用程序 但它既不会抛出任何错误 也不会验证任何内容 我不知道我的代码还有什么问题 任何帮助将不胜感激 document ready function theform valida
  • 如何解决“值对于 dtype('float32') 来说太大?”

    我读了很多与此类似的问题 但仍然无法弄清楚 clf DecisionTreeClassifier clf fit X train y train X to predict array 1 37097033e 002 0 00000000e
  • 是否可以有一个函数接受任意数量、任意类型的变量?

    我有一个简单的函数 它接受一个字符串并用该字符串向我发送一封电子邮件 该函数在调试实时站点时使用 public void errEmailV1 string strVars sendEmail me email emailSubject s
  • 测试控制器有意义吗

    我有一个简单的 MVC 应用程序 由视图 gt 控制器 gt 服务 gt 模型组成 我的控制器真的很瘦 他们所做的就是调用服务方法并填充 ModelAndView 对控制器进行单元测试以确保它们在完全模拟服务的同时在 ModelAndVie
  • 查询以搜索所有包中的表和/或列

    是否可以运行查询来搜索所有包以查看包中是否使用了特定的表和 或列 包太多 无法打开每个包并查找我正在寻找的值 你可以这样做 select from user source where upper text like upper SOMETE
  • 困惑:Django“无法导入app.views”但可以导入app,在WSGI中?

    我遇到了一个奇怪的 Django 问题 使用 mod wsgi 运行 Django 姜戈正在寻找urls py 然后说 ViewDoesNotExist Could not import app views Error was No mod
  • 在 .dot 树中强制执行水平节点排序

    我正在尝试使用 GraphViz 重新创建二叉搜索树的示例图 它最终应该是这样的 这是我的第一次尝试 digraph G nodesep 0 3 ranksep 0 2 margin 0 1 node shape circle edge a
  • 将值从文本文件传递到数组

    我的代码有一些问题 我的程序根据来自输入文件的三个带的颜色计算电阻值 然后打印到输出文件 输入文件示例 红 绿 蓝绿色 灰色 黄色 输出文件示例 电阻 欧姆 680电阻 千欧姆 1420 然而 每次我运行该程序时它都会崩溃 我进行了一些调试
  • ngrx 和 ngxs 之间的性能差异? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想在我的 Angular 6 应用程序中使用 ngxs 进行状态管理 但我不确定它对于大型项目是否成熟 我找不到任何有关 ngrx 和 ngx
  • 是否可以定义一个包含对象的对象?

    我有这个对象 var a 1 topicId 1 subTopicId 1 topicName x subTopicName x 2 topicId 1 subTopicId 2 topicName x subTopicName x 62
  • roc_auc_score 和plot_roc_curve 结果不同

    我正在训练一个RandomForestClassifier sklearn 预测信用卡欺诈 然后当我测试模型并检查 rocauc 分数时 我在使用时会得到不同的值roc auc score and plot roc curve roc au
  • React ApexCharts 按时间间隔更新图表

    我正在构建一个 React 应用程序 它将显示一些需要通过 api 调用不断更新的图表 使用 ApexCharts 它们将显示来自不同来源的传感器数据 我根据需要设计和配置了图表 但是如果我通过更改状态数组来更新数据setInterval表
  • AngularJs $q 承诺与 async/await 兼容吗?

    我正在使用 TypeScript 版本分别为 9 07 1 5 11 和 3 7 5 开发 Angular AngularJs 混合应用程序 我们所有的 HTTP 请求 甚至是由新的 Angular 组件发出的请求 都使用以纯 Javasc