gpt4 book ai didi

javascript - 处理 ajax 请求 - Promise 与 RxJs observable - rxjs operator preferences

转载 作者:行者123 更新时间:2023-11-30 09:32:12 26 4
gpt4 key购买 nike

我正在使用 Rxjs Observables 来处理嵌套的 ajax 请求,如下所示:

Rx.Observable.fromPromise($.getJSON('list1.json'))
.switchMap(function responseA(aResponse){
/* processing aResponse*/
if(aResponse.fileName){
return Rx.Observable.fromPromise($.getJSON(aResponse.fileName));
}
return Rx.Observable.fromPromise($.getJSON('list2.json'));
})
.subscribe(function(finalResponse){
/* processing finalResponse */
});

但是,如您所知,它也可以不使用 Observables 而只使用 promises 来完成:

   $.getJSON('list1.json')
.then(function responseA(aResponse){
/* processing aResponse*/
if(aResponse.fileName){
return $.getJSON(aResponse.fileName);
}
return $.getJSON('list2.json');
})
.then(function(finalResponse){
/* processing finalResponse */
});

两种代码都有效,但在我看来,使用 promises 在代码方面更干净。

我是否遗漏了什么,因为我认为 Rx Observable 在处理异步请求方面更加标准和高效。

在处理 ajax 请求的代码组织、约定和性能方面,哪一个(promise 或 Observable)最好?

如果我更喜欢使用 Observable,那么在这种情况下哪些运算符(switchMap/MergeMap)更可取?

最佳答案

Am I missing something here as I've heart that Rx Observable is more standard and efficient to handle asynchronous requests.

不,您没有遗漏任何东西。 Rx 确实很有用,但在特定情况下,基于 promise 的代码更简单。

一般来说,如果您需要一个奇异值 - 更喜欢 promise。如果您需要输入/输出多个值 - 使用可观察对象(或更先进的规范异步迭代器)。

如果你想快速需要添加 Rx 会很好:

  • 如果请求失败则重试请求(使用 Observable.defer)。
  • 只关心最后一个请求。
  • 如果您需要内置取消功能。

值得一提的是 - 如果您使用库,promises 可以完成所有这些工作。它不是可观察对象的基本属性。

如果您的输入不仅仅是一次调用,那么 Rx 真的很出色。如果您需要在用户点击某些东西时进行这些调用,忽略某些条件下的点击,将其去抖动到 100 毫秒,然后只关心最后一次调用 - Rx 将非常有用。

在这种特殊情况下 - promise 更简单也更好。您的 promise 代码可以进一步简化:

$.getJSON('list1.json').then(x => $.getJSON(x.fileName || 'list2.json'))

关于javascript - 处理 ajax 请求 - Promise 与 RxJs observable - rxjs operator preferences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45605333/

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