Observable.if无法正常工作

时间:2017-03-03 09:43:20

标签: angular ionic2 rxjs

我不认识这些人,但这有什么不对吗?

this.auth.userAvailable(data.email)
    .flatMap(res => {
      return Observable.if(
        function () {
          return res.success;
        },
        Observable.fromPromise(this.auth.localStore('user_info', data)),
        Observable.throw(new Error('User exists'))
      )
    })
    .subscribe(res => {
      this.navCtrl.push(ServiceProviderBusinessInfoPage);
    }, err => {
      let error = err.json();
      this.alertCtrl.create({
        title: 'Error',
        message: error.message,
        buttons: ['OK']
      }).present();
    });

即使res.success每次false被解雇,{}返回this.auth.localStore('user_info', data), 订阅成功通话也没有被解雇

帮我解释这段代码,我是rxjs的新手

2 个答案:

答案 0 :(得分:2)

在您的情况下,实际上并不需要Observable.if,为什么不使用简单的switchMap

this.auth.userAvailable(data.email)
    .switchMap(res => {
      if (res.success) {
        return Observable.fromPromise(this.auth.localStore('user_info', data));
      } else {
        return Observable.throw(new Error('User exists'));
      }
    })
    .subscribe(res => {
      this.navCtrl.push(ServiceProviderBusinessInfoPage);
    }, err => {
      let error = err.json();
      this.alertCtrl.create({
        title: 'Error',
        message: error.message,
        buttons: ['OK']
      }).present();
    });

答案 1 :(得分:0)

这与"env": { "test": { "presets": [["env", { "targets": { "node": true } }]] } } 的工作方式有关。这是在这里报告的:https://github.com/ReactiveX/rxjs/issues/2768

解决方法放在这里:https://github.com/ReactiveX/rxjs/issues/2768#issuecomment-317877914

因此,以您的示例为例,

if