并行运行异步任务

2024-03-25

在 RxJS 中,当您想要按顺序运行 http 请求时,您可以将它们链接起来。但我不清楚如何并行运行请求?我在例子中看到http://reactive-extensions.github.io/learnrx/ http://reactive-extensions.github.io/learnrx/他们使用 Observable.zip() 并行运行 2 个请求。但是如何并行运行 5 个请求呢? 更具体地说,如何设置以便调用我的函数:

  • 5个什么时候完成?
  • 第一次完成时?

Use 结合最新 http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-combineLatest or forkJoin http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-forkJoin!

// Assume you have an array of urls
const urls = [
  "twitter.com/puppies.json", 
  "google.com/puppies.json", 
  "facebook.com/puppies.json"
];

// Let's map these urls to Ajax Observables
const requests = urls.map(url => Rx.DOM.Ajax.getJSON(url))

// Now combine the result from each request into an observable
// Here's combineLatest:
const allThePuppies$ = Rx.Observable.combineLatest(...urls)
// Alternatively, here's forkJoin:
const allThePuppies$ = Rx.Observable.forkJoin(urls)


// When you subscribe to `allThePuppies$`, you'll kick off all your requests in parallel, and your response will contain an array with the results from each request:
allThePuppies$.subscribe(results => {
  const twitterPuppies, googlePuppies, facebookPuppies = results;
  // Do what you must with the respective responses
  // (Presumably in this example you'd show your users some adorable pics of puppies)
})

combineLatest接受任意数量的 observable,一旦每个 observable 发出至少一个值,当其中任何一个 observable 触发时,它将发出每个 observable 的最新值的数组。

但这是非常抽象的。出于我们的目的,我们知道少数 ajax 请求实际上只会发出一次。所以,如果我们使用combineLatest对于少数 ajax observables,我们最终会得到一个 observable,它从每个 ajax 请求中发出一组结果。

forkJoin类似于combineLatest,但只有在其每个组成的可观察量完成后,它才会发出其响应数组。

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

并行运行异步任务 的相关文章

随机推荐

  • ThreeJS中InstancedMesh和InterleavedBuffer的区别和使用

    任何人都可以帮助我们解决 Threejs 中 InstancedMesh 和 InterleavedBuffer 之间的区别吗 我对这两个主题都感到困惑 任何人都可以让我知道哪种是渲染大量几何图形的优化方法 提前致谢 实例化渲染和交错缓冲区
  • Restlet用json接收和响应实现post

    首先 我想知道我正在做的事情是否正确 我有一个场景 我将收到一个 json 请求 并且我必须用它来更新数据库 一旦数据库更新 我必须用 json 确认进行响应 到目前为止我所做的是创建类扩展应用程序 如下所示 Override public
  • 在 Ubuntu 20.04 上自动启动 MailHog

    我按照以下步骤在临时环境中安装了 MailHog sudo apt get y install golang go go get github com mailhog MailHog 为了手动启动该服务 我这样做 cd go bin Mai
  • Visual Studio:MSB3073 错误退出,代码为 1

    每个人 我正在 Visual Studio 2013 中编译 DCMTK 3 6 1 我的操作系统是 Windows 8 我还使用了 CMake 3 2 3 我已经为 ALL BUILD 项目成功编译了 x64 版本的调试版本和发布版本 但
  • 如何在基于自定义策略的授权中访问 dbcontext 和会话

    我们是否可以访问 dbcontext 来获取自定义基于策略的授权中的表数据和会话 任何人都可以帮助如何实现它 services AddAuthorization options gt options AddPolicy CheckAutho
  • Objective-C 中省略返回类型和参数类型

    如果未显式声明返回或参数类型 则假定它是方法和消息的默认类型 id 因此 从技术上讲 它是如何工作的 这是毫无疑问的 但是忽略该类型是否是明智的 或者这只是一种不好的做法 苹果有这方面的官方指南吗 这是不好的做法 这是 C 早期的遗留问题
  • 在 vscode 上找不到“openssl/crypto.h”文件

    即使我将包含路径添加到 openssl 我也收到以下编译错误 我在 MAC 上使用 vscode 你能告诉我如何修复它吗 Error main cpp 3 10 fatal error openssl crypto h file not f
  • GlassFish Server 更新中心安装超时

    我已将 GlassFish Server 实例安装到 Netbeans 中 并且正在尝试安装其更新中心 我在 Windows 7 下以管理员身份运行 Netbeans 我的互联网连接速度很快 pkg oracle com 似乎从浏览器加载得
  • 在 Android 上使用 Firebase Analytics 时出现 SERVICE_VERSION_UPDATE_REQUIRED 错误

    我想将 Firebase Analytics 集成到我的项目中 我跟着Guide https firebase google com docs android setup但它给了我这个警告 06 30 18 38 30 514 W FA 2
  • 如何在调用下一个函数之前等待 firebase.database().ref('users/' + userId).set() 完成?

    我使用以下异步函数将数据写入我的 firebase 实例 function writeUserData uid fn ln userEmail firebase database ref users uid set firstName fn
  • 如何从 .wav 文件中提取特定频率范围?

    I m really声音处理方面的新知识 所以也许我的问题很简单 我想要做的是使用 R 从 wav 文件中提取特定的频率范围 假设为 150 400 Hz 换句话说 我想创建另一个波形文件 wave2 其中仅包含我想要的频率分量 指定 15
  • Github Actions 和 npm - npm:找不到命令

    我已经在 github actions 上创建了一个部署操作 这一切都适用于composer install 和 git pull master 分支 然而 在我的数字海洋水滴上 我遇到了问题bash line 4 npm command
  • 调用相机时,三星 Intent For OnActivityResult 为 Null

    我正在使用以下代码从相机获取图片 除三星外 其他手机均运行良好 请让我知道我做错了什么 final File root new File Environment getExternalStorageDirectory File separa
  • 鼠标按下事件计时

    我被要求编写代码 使其能够单击 Excel 中的图像并在其顶部添加形状 这是物理治疗师的身体图 该形状将指示患者疼痛的部位 我的代码通过使用 ActiveX 图像控件的鼠标按下事件来完成此操作 Private Sub bodypic Mou
  • 如何获取去电连接状态

    在我的应用程序开发中 我需要在拨出电话接通时进行振动 但无法获取呼叫已接听状态 我读过一些关于这个问题的主题 例如 去电状态 https stackoverflow com questions 2099782 outgoing call s
  • 为什么我的指令的链接函数从未被调用?

    我有这个指令 hpDsat directive ngElementReady function return restrict A link function scope element attributes put watches her
  • 自定义 HTML 元素

    The HTML 规范 https html spec whatwg org multipage scripting html custom elements描述了存储在中的几种元素自定义元素注册表 内置元素如 a 由内置子类表示HTML元
  • 如何查看 linq 查询生成的 sql

    只是试图获取由 linq 查询生成的 sql 使用 Linq2Sql dc GetCommand query CommandText see http msdn microsoft com en us library system data
  • 如何从字符串中解析 ODataQueryOptions?

    我必须在符合 OData 规范的 ASP NET API 上为 EF6 实体提供一些读取端点 实体检索基于接受实体的函数而工作良好System Web Http OData Query ODataQueryOptions
  • 并行运行异步任务

    在 RxJS 中 当您想要按顺序运行 http 请求时 您可以将它们链接起来 但我不清楚如何并行运行请求 我在例子中看到http reactive extensions github io learnrx http reactive ext