2

我想知道在几个(无序)ajax 调用完成后触发事件的最佳方法是什么。

为了更清楚一点,我想调用一个触发几个 ajax 调用的方法 doSomethingGreat(),这些调用成功的顺序是不必要的。当所有这些调用都成功时,我只想触发一个事件“SomethingGreatFinished”。我也不想链接这些调用,因为那样会缺乏性能并且完全违背异步编程的想法。

我想知道 a.) 是否有一个共同的模式,b.) 这可以通过 JavaScript 的响应式扩展 (RxJs) 或 c.) 与本机 jquery 功能来完成。

任何帮助表示赞赏!

4

3 回答 3

3

RxJS 将允许您使用 ForkJoin 运算符来执行此操作,该运算符接受 N 个带有值的可观察对象,并创建一个可观察对象,当所有 N 个可观察对象完成时,该可观察对象会以数组触发。

请参阅 Matthew Podwysocki 关于此运算符的博客文章:http: //codebetter.com/blogs/matthew.podwysocki/archive/2010/04/23/introduction-to-the-reactive-extensions-for-javascript-going-parallel-with -forkjoin.aspx

于 2010-07-21T23:53:06.160 回答
1

你应该看看.ajaxStop()

但是,这callback将在每个完成的 ajax 请求上触发。因此,为了知道您的最后一个请求何时完成,您还需要调用.ajaxStart(),或者您需要为global variable您触发的每个请求迭代 a 并将decrement其 on .ajaxStop()。如果该变量达到zero,则您的所有请求都已完成。

于 2010-07-21T07:21:30.483 回答
0

如果您知道正在进行多少次调用,则将一个变量设置为该数字,并在每次 AJAX 完成事件发生时将其递减。当变量达到零时,“SomethingGreat”发生了。

于 2010-07-21T07:16:08.403 回答