gpt4 book ai didi

javascript - 并行触发异步请求,但使用 rxjs 按顺序获取结果

转载 作者:行者123 更新时间:2023-12-04 19:02:27 26 4
gpt4 key购买 nike

例如:
使用 jquery ajax 并行获取 5 页。当 page2 返回时,什么也不做。当 page1 返回时,对 page1 和 page 2 做一些事情。

// assume there is some operator that can do this, 
// then it might look like this?
Rx.Observable.range(1, 5).
someOperator(function(page) {
return Rx.Observable.defer( () => $.get(page) );
}).scan(function(preVal, curItem) {
preVal.push(curItem);
return preVal;
}, []);

最佳答案

存在forkJoin运算符 run all observable sequences in parallel and collect their last elements. (引自文档)。但是如果你使用那个,你将不得不等待所有 5 个 promise 都解决,或者 5 个中的一个出错。它与 RSVP.all 非常接近或 jQuery.when .因此,一旦您拥有第二个,那将不允许您做某事。无论如何我都会提到它,以防它在另一种情况下对你有用。

另一种可能性是使用 concatMap这将允许您按顺序接收已解决的 promise 。但是,我不清楚它们是否会并行启动,第二个 promise 只有在第一个 promise 解决后才应该开始。

我能想到的最后一个选项是使用 merge(2) ,这应该并行运行两个 Promise,并且在任何时候它们都只会是两个 Promise 被“启动”。

现在如果你不使用 defer ,而您使用 concatMap ,我相信你应该已经启动了所有 AJAX 请求,并且仍然是正确的顺序。所以你可以写:

.concatMap(function(page) {
return $.get(page);
})

相关文件:
  • merge(maxConcurrency)
  • concatMap
  • forkJoin
  • 关于javascript - 并行触发异步请求,但使用 rxjs 按顺序获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34486932/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com