zone.js/dist/zone-patch-rxjs 的用途

2023-11-24

也许我问这个问题已经太晚了,但无论如何。

有人可以解释一下在什么情况下我需要导入区域的补丁 -zone.js/dist/zone-patch-rxjs。据我所知,补丁已添加于此PR(的继承者this one).

I use zone and RxJs in my Angular项目尽管看到make rxjs run in correct zone在PR的描述中我不完全明白它什么时候可以帮助我或者它应该为我解决什么问题。

我希望有一些代码示例,例如之前/之后。

提前致谢。


你可以在这里检查一下,https://github.com/angular/angular/blob/master/packages/zone.js/NON-STANDARD-APIS.md

我们的想法是让rxjs在不同情况下进入正确的区域。

zone.js 还提供了 rxjs 补丁,以确保 rxjs Observable/Subscription/Operator 在正确的区域中运行。详情请参阅拉取请求 843。下面的示例代码描述了这个想法。

const constructorZone = Zone.current.fork({name: 'constructor'});
const subscriptionZone = Zone.current.fork({name: 'subscription'});
const operatorZone = Zone.current.fork({name: 'operator'});

let observable;
let subscriber;
constructorZone.run(() => {
  observable = new Observable((_subscriber) => {
    subscriber = _subscriber;
    console.log('current zone when construct observable:', 
      Zone.current.name); // will output constructor.
    return () => {
      console.log('current zone when unsubscribe observable:', 
      Zone.current.name); // will output constructor.
    }
  });
}); 

subscriptionZone.run(() => {
  observable.subscribe(() => {
    console.log('current zone when subscription next', 
      Zone.current.name); // will output subscription. 
  }, () => {
    console.log('current zone when subscription error', d 
      Zone.current.name); // will output subscription. 
  }, () => {
    console.log('current zone when subscription complete', 
      Zone.current.name); // will output subscription. 
  });
});

operatorZone.run(() => {
  observable.map(() => {
    console.log('current zone when map operator', Zone.current.name); 
    // will output operator. 
  });
});

目前基本上 rxjs API 包含的所有内容

  • 可观察的
  • 订阅
  • 订户
  • 运营商
  • 调度程序

已修补,因此每个异步调用都将在正确的区域中运行。

回答你的评论问题。

不,这是不正确的。 目前,如果没有补丁,每个回调将在角度区域内部或外部运行,具体取决于发射器。它与回调的创建时间无关。

例如。

let sub;
ngZone.runOutsideAngular(() => {
   const observable = new Observable(subscriber => sub = subscriber));
   observable.subscribe(() => {
      // in ngzone
   });
});

ngZone.run(() => {
  sub.next(1);
});

在这种情况下,observable是在角度区域之外创建的,但是subscriber.next是在角度区域内调用的,所以最后,回调仍将在角度区域中。

使用补丁后,回调将在 ngzone 之外,因为它是在 ngzone 之外创建的。

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

zone.js/dist/zone-patch-rxjs 的用途 的相关文章

  • 如何在 Angular2 中实现间隔/轮询以与量角器一起使用?

    我有一个 angular2 应用程序 我想用量角器进行测试 在此应用程序中 我有一个带有图表的页面 该页面正在使用自动生成的数据定期更新 显然 Protractor 的一项功能是在执行测试代码之前等待脚本和 http 调用完成 但是 如果有
  • Angular 4:如何使用 HTTPClient 读取文本文件的内容

    我的 Angular 4 项目目录中有一个 txt 文件 我想读取其内容 怎么做 下面是我使用的代码 该文件位于 app 文件夹内的 files 文件夹中 我拥有 HTTPClient 代码的组件位于 app 文件夹内的 httpclien
  • Angular 4在下一行显示p标签的换行符

    我有一个 Angular 4 页面 我必须在其中显示用户评论列表 用户可以多行输入评论 我想在多行中绑定文本 我想显示以 n在新行中 我努力了 p p p comment text p 我不想更换 n with br 标签 我想要别的东西
  • Angular 2 Observable 具有多个订阅者

    我有一个 Angular 2 服务 可以从 API 获取数据 该服务有 3 个订阅者 在组件中定义 每个订阅者都对数据执行其他操作 不同的图表 我注意到我正在向 API 发出三个 GET 请求 而我想要实现的是一个请求 并且订阅者将共享数据
  • 测试 - 存根服务方法未定义

    我已经在非常简单的代码上编写了一个非常简单的测试 但由于某种原因存根服务方法未定义 当我使用 Jasmine Spy 时 它可以工作 但对于这样一个简单的任务 有人可以解释一下为什么会发生这种情况吗 我删除了 import 语句只是为了减少
  • 数字和文本列的垫排序问题

    我有角度材料数据源 角度材料版本是 5 0 3 排序正在进行中 但是对于某些列 它的排序不正确 那里有数字和文字 例如 排序结果如 XXX 1 1tesxt 1 OPD OXD 12
  • 无法在 Angular 4 中使用自定义主题

    我正在尝试在我的角度项目中使用我的自定义主题 它没有按预期工作 我收到以下错误 node modules css loader sourceMap false importLoaders 1 node modules postcss loa
  • ngrx 存储是否持久?

    ngrx 存储是否持久 换句话说 我们可以关闭浏览器重新打开它 并检索添加到ngrx 商店 https github com ngrx platform 目前 ngrx store 不支持此类功能 但是您可以通过使用类似的库来维护状态ngr
  • 如何在 Angular 2 应用程序中从 TypeScript/JavaScript 中的字符串获取类?

    在我的应用程序中 我有这样的内容 user ts export class User 现在 我这样做 应用程序组件 ts callAnotherFunction User 如果我将类名作为字符串 即 我该如何做到这一点 User 如果可能的
  • 避免在 Angular 2+ 中嵌套订阅?

    我有2个端点 1 个端点来获取当前用户的日志 1 个端点来获取该用户的授权 实际上我使用 this user subscribe e gt this grants get e subscribe x gt console log x 但这是
  • Angular2 与 Jquery-ui 滑块

    我尝试将 Jquery ui 滑块与 angular2 一起使用 我想让变量 slideValue 显示滑块的值 但我不知道如何将我的模型或变量从角度绑定到滑块 这是我的滑块组件 import Component ElementRef In
  • 如何在 Angular 2 应用程序中使 DateAdapter 单例?

    我正在开发一个带有延迟加载模块的 Angular 7 应用程序 我也使用有角度的材料组件 我想在日期选择器组件中本地化并支持多个区域设置 当应用程序语言发生变化时 我想在整个应用程序中全局更改它 可以通过 DateAdapter setLo
  • 如何更改元素的 CSS 类并在单击时删除所有其他类

    我如何处理 AngularJS 2 中的一种情况 即单击一个元素需要更改其自己的样式 并且如果其他元素具有该样式 则需要将其删除 最好在一个函数中 如同Angular js 如何在单击时更改元素 css 类并删除所有其他元素 https s
  • Angular - 为每个请求设置标头

    我需要在用户登录后为每个后续请求设置一些授权标头 要为特定请求设置标头 import Headers from angular2 http var headers new Headers headers append headerName
  • Windows 10 中的 npm 安装错误( npm install -g angular-cli )

    node v v4 5 0 npm v 5 0 1 有人在 Windows 10 中安装 angular cli 时遇到过这种问题吗 请尝试以下操作 step 0 运行这个命令 npm uninstall g angular cli npm
  • 如何显示 GroupList 的 FormArray?

    我正在尝试制作一个交互式表单 在每一行上列出一个项目以及一个删除按钮 在我的示例中称为 verwijderen 这些项目是从数据库中检索的 并且每个项目都实例化为名为的自定义对象LaborPeriod 然后这些对象被转化为FormGroup
  • Angular 停止 Enter 键提交

    I am trying to stop the Enter from submitting my button and rather make it point to another function I tried trapping th
  • 在 Angular 中获取当前路由路径名称的最简单方法是什么?

    我正在寻找一种获取当前路线的路径名称的好方法 这是我能找到的最简单的 this route snapshot firstChild url 0 path 有没有更好的办法 谢谢 谢谢大家的回答 这是我发现我必须做的 router event
  • 使用 Nginx 在 Docker 容器内部署带有路由器的 Angular2

    我正在尝试部署一个使用框架的路由器功能的 Angular 2 但在 docker 容器内使用 nginx 为其提供服务时遇到一些问题 由 angular cli 构建的 Angular 应用程序具有如下文件结构 dist 08c42df75
  • 编辑角度材质的表格单元格填充

    当我使用开发人员工具检查该元素时 它显示零填充 但是当我查看它并将鼠标悬停在它上面时 它非常清楚地在单元格内具有填充 我不知道这是从哪里来的 并且设置td padding 0 important 什么也没做 感知到的填充是由以下原因引起的d

随机推荐

  • 如何访问 Nuxt 插件中的 .env 变量?

    细分分析提供了一个包含秘密 API 密钥的代码片段 在我的Nuxt js项目我创建了一个名为的插件segment js我在我的nuxt config js nuxt config js plugins src plugins segment
  • Flutter中的shrinkWrap属性有什么作用?

    我是 Flutter 的新手 非常渴望学习这项技术 我无法理解的工作shrinkWrap财产在ListView 我无法理解颤振文档 通常是一个ListView 也GridView PageView and CustomScrollView
  • Java如何利用多核?

    JVM 在单个进程中运行 JVM 中的线程共享属于该进程的堆 那么JVM如何利用多核提供多OS线程来实现高并发呢 您可以通过多个线程来利用多个核心 但是使用比机器中存在的核心数量更多的线程可能只是浪费资源 您可以使用可用处理器 获取核心数量
  • Cython 的 language_level 3 和 3str 有什么区别?

    在即将推出的 Cython 3 0 版本中 3strlanguage level 它是随着赛通0 29 成为新的默认值而不是当前的默认值2 即如果未设置 language level 如何设置 我们收到以下警告 FutureWarning
  • ImageMagick 将色彩空间缩减为灰色

    我使用以下命令将 RGB 和 CMYK TIFF 图像转换为 RGB JPEG convert a tif colorspace rgb a jpg 如果 TIFF 图像仅包含灰色像素 则生成的 JPEG 颜色空间为灰色 而不是 RGB 如
  • 在循环中收集未知数量的结果

    如果事先不知道最终结果的数量 那么在 R 循环中收集结果的惯用方法是什么 这是一个玩具示例 results vector integer i 1L while i lt bigBigBIGNumber if someCondition i
  • MySQL 查询执行但抛出异常

    My code try sql Driver driver sql Connection con sql Statement stmt Create a connection driver get driver instance con d
  • C# 控制台同时输入和输出?

    我正在编写一个服务器应用程序 我希望它基于控制台 我需要用户能够输入不同的命令 但同时用户在写入时有可能会向控制台输出某些内容 这会弄乱缓冲区 有什么干净的方法可以做到这一点吗 Thanks 我开始编写一个测试程序 以展示如何将控制台分为输
  • CGContext pdf页面宽高比适合

    我正在使用代码在 CGContext 上显示 pdf 页面 void drawLayer CALayer layer inContext CGContextRef context CGContextSetRGBFillColor ctx 1
  • XAMPP for Windows 中 mysql 客户端“.my.cnf”的位置是什么?

    mysql客户端的位置在哪里 my cnf在 Windows 中使用 XAMPP 澄清 这个文件默认不存在 那么当你创建它时 你应该把它放在哪里 以便命令行客户端自动读取它 输入 mysql help 然后看输出 大约 3 4 处有一段文字
  • Java 8 函数总是返回相同的值而不考虑参数

    Java 8 中是否有一个预定义的函数可以执行以下操作 static
  • 如何将所有页面 301 重定向到新域上的相同页面

    我正在将我的网站从 old domain com 移动到具有完全相同页面的 new domain com 例如 如果 old domain com 有 page1 html 即 old domain com page1 html 那么新域具
  • Delphi TIdhttp 发布 JSON?

    有人让 JSON 与 TIdHttp 一起使用吗 PHP 总是返回 NULL POST 我做错了什么吗 德尔福源码 http TIdHttp Create nil http HandleRedirects True http ReadTim
  • 如何在ReactJS中获取下拉菜单的选定值

    我正在使用 React 我想获取 React 中下拉列表中所选选项的值 但我不知道如何获取 有什么建议么 谢谢 我的下拉菜单只是一个选择 例如
  • 使用 Java Hibernate 进行会话管理

    我有一个基于 Hibernate 的平台 由无状态 servlet 构建 一个用于注册用户 其余用于查询数据库 我使用 Hibernate 的会话如下 Session session HibernateUtil getSessionFact
  • Angular 4 jquery 不起作用

    我正在尝试在我的 Angular 4 应用程序中使用 jquery 我已按照所有步骤在我的 Angular 4 上安装 jquery 但是 jquery 仍然不起作用 我已经将 jquery 代码放在这样的组件上 home componen
  • 通过 C# 运行时无法识别 BCDEDIT

    当我尝试从 C 应用程序运行 BCDEDIT 时 出现以下错误 bcdedit 不被识别为内部或外部 命令 可运行的程序或批处理文件 当我通过提升的命令行运行它时 我得到了预期的结果 我使用了以下代码 Process p new Proce
  • 如何让 WebClient 使用 Cookie?

    我希望 VB net WebClient 记住 cookies 我搜索并尝试了许多重载类 我想通过 POST 登录网站 然后 POST 到另一个页面并获取其内容 同时仍保留我的会话 VB net 是否可以在不使用 WebBrowser 控件
  • OpenCV、Python如何去除图像中的噪声?

    我有一些裁剪后的图像 并且需要白色背景上有黑色文本的图像 首先 我应用自适应阈值 然后尝试消除噪声 虽然我尝试了很多噪声去除技术 但是当图像发生变化时 我使用的技术失败了 将图像颜色转换为二进制的最佳方法是自适应高斯阈值 这是我的代码 im
  • zone.js/dist/zone-patch-rxjs 的用途

    也许我问这个问题已经太晚了 但无论如何 有人可以解释一下在什么情况下我需要导入区域的补丁 zone js dist zone patch rxjs 据我所知 补丁已添加于此PR 的继承者this one I use zone and RxJ