如何在combineLatest中为每个函数分别进行错误处理?

时间:2018-04-02 09:27:59

标签: angular error-handling rxjs combinelatest

我需要在这个combineLatest中处理每个函数的错误场景。我将添加以下代码

const combined = combineLatest(
  this.myservice1.fn1(param),
  this.myservice2.fn2(), 
  this.myservice3.fn3());

const subscribe = combined.subscribe(
  ([fn1,fn2, fn3]) => {
    // operations i need to do
  },
  // how to handle error for fn1, fn2, fn3 separately
  (error) => {
  }
);

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

您可以在使用最新combineLatest之前捕获每个源Observable的错误,如果您想稍后处理它们或将它们转换为其他错误,最终会重新抛出它:

combineLatest(
  this.myservice1.fn1(param)
    .pipe(
      catchError(err => {
        if (err.whatever === 42) {
          // ... whatever
        }
        throw err;
      }),
    ),
  this.myservice2.fn2()
    .pipe(
      catchError(err => /* ... */),
    ),
  ...
)

答案 1 :(得分:0)

我正在使用RxJava,我想使用操作符CombineLatest组合12种不同的可观察对象。

我看到了一个函数原型,该原型带有一个可观察对象列表和一个实现。但是我不确定该怎么做,我在实现call方法时遇到了麻烦。 请检查我的代码并做必要的事情。

Stream>获取城市=> _citiesController.stream;

Stream get city => _cityController.stream;

Stream get agentcity => _agentcityController.stream;

Stream get userpackages => _packagesController.stream;

流获取电子邮件=> _emailController.stream.transform(validateEmail);

流获取名字=>       _firstNameController.stream.transform(validateFirstName);

流获取lastName =>       _lastNameController.stream.transform(validateLastName);

流get mobileNumber =>       _mobileNumberController.stream.transform(validateMobile);

Stream get dob => _dobController.stream.transform(validatedob);

流获取约会日期=>       _appointmentdateController.stream.transform(validateappointmentDate);

流获取密码=>       _pincodeController.stream.transform(validatePincode);

流获取性别=> _genderController.stream;

流获取地址=>       _addressController.stream.transform(validateAddress);

流获取代理名=>       _agentnameController.stream.transform(validateAgentName);

流获取有效的提交=> Observable.combineLatest9(

    email,
    firstName,
    mobileNumber,
    pincode,
    dob,
    address,
    agentname,
    _genderController.stream,
    _cityController.stream,
    _agentcityController.stream,
    _packagesController.stream,
    _appointmentdateController.stream,
    (e, f, m, p, d, a, an, g, c, ac, pc, ad) => true,
  );

请让我知道如何在我的代码中使用CombineLatest。