一般如何将调用链接到ng2-Translate和rxjs observables?

彼得

我刚刚在Ionic 2(Angular 2)项目中开始使用ng2转换。我发现当我需要一次获取几个字符串时,代码变得嵌套并且很难阅读。我想知道为什么这样的东西(只发出一个值)需要使用可观察的东西,但是也许有一个很好的理由。反正...

例如,假设我有4个字符串要在一个方法中的各个点读取

let result1: string;
let result2: string;
let result3: string;
let result4: string;

this.translate.get("key1").subscribe(value1 => {
    result1 = value1;
    this.translate.get("key2").subscribe(value2 => {
        result2 = value2;

        // do some other stuff, which may have another observable returned so yet another level of nesting)

        this.translate.get("key3").subscribe(value3 => {
            result3 = value3;

            // do some other stuff

            this.translate.get("key4").subscribe(value4 => {
                result4 = value4;
            }
        }
        ...

现在想象一下,有超过4个字符串。同样,当它们之间还有其他代码时(例如,我也可以称为离子存储,它也返回一个Observable),该代码将变得非常嵌套-并且没有错误处理。

因此,问题是:是否有一种“奉承”的方式来做到这一点?是否有任何链接(即使类似于Promise的链接),也可能包括错误处理(即使有某种顶级catch块)

我已经看到了链接的其他示例,但是它们似乎更多地与运算符相关,而不是像上面这样的大量可观察对象。

卡坦

您不必将它们链接起来;您可以combineLatest用来合并可观察对象:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/combineLatest';

Observable.combineLatest(
    this.translate.get("key1"),
    this.translate.get("key2"),
    this.translate.get("key3"),
    this.translate.get("key4")
)
.subscribe(([result1, result2, result3, result4]) => {
    console.log(result1);
    console.log(result2);
    console.log(result3);
    console.log(result4);
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章