gpt4 book ai didi

javascript - RxJS 方法导致回调 hell

转载 作者:搜寻专家 更新时间:2023-10-31 23:40:45 25 4
gpt4 key购买 nike

我想在以下用例中使用 ReactiveJS Observable 方法。

IF MAIN_CACHE EXIST
RETURN OUTPUT
ELSE IF DB CONNECTION EXIST
CACHE MAIN_CACHE (1 Hour)
CACHE FALLBACK_CACHE (3 Days)
RETURN OUTPUT
ELSE IF FALLBACK_CACHE EXIST
RETURN OUTPUT

我得到了预期的输出,但我觉得这会导致 Callback Hell 我认为,这仍然不是一个好方法,我在 ReactiveJS Observable 键中遗漏了一些东西好处。

下面是我的代码,整个代码在 JS Bin Link

mainCache.subscribe(function (response) {
console.log(response);
}, function (error) {
dbData.subscribe(function (response) {
console.log(response);
}, function (error) {
console.log('DB CAL Log info', error);
fallbackCache.subscribe(function (response) {
console.log('FALLBACK CACHE SERVED');
console.log(response);
}, function (error) {
console.log('DB CAL Log error', error);
});
});
});

Any lights. much appreciated with working example.

最佳答案

您的实现确实是回调 hell 。您可以通过使用可用的 rxjs 运算符组合您的可观察对象来避免它,并在您想要接收数据并且没有更多转换时在最后订阅。你可以看看How to do the chain sequence in rxjsWhy we need to use flatMap? , 查看如何链接运算符,并在链接结束时仅使用一个 subscribe

在这里,您的链接来自捕获错误,所以就像 promise 一样,最佳实践是像您一样尽早捕获错误,为此您可以使用 catch operator`。

mainCache
.do(console.log.bind(console))
.catch(err => dbData.catch(err => {
console.log('DB CAL Log info', error);
return fallbackCache.do(response => {
console.log('FALLBACK CACHE SERVED');
console.log(response);
}).catch(console.log.bind(console, `DB CAL Log error`))
}))

这仅与您的用例无关,但为了提供信息,我还包含了此链接,该链接处理在未命中情况下的重试(例如来自 dbData):retryWhen with backoff

关于javascript - RxJS 方法导致回调 hell ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43055444/

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