0

私はcodebaseの角度ファイア認証を行っていましたが、このコードの動作を理解できませんでした。観測可能な次の演算子の使用方法の混乱

基本的には、どのようにobserver.next()が使用されているのか混乱しています。

私は、このメソッドは観察可能なものを返すはずだが、それで.next()を実行するとどのように役立つのか理解しています。

また、takelastの別名next()hereのドキュメントも見ています。

私はまだこれがどのように機能しているのかまだ分かりません。

loginWithFacebook() { 
    return Observable.create(observer => { 
    if (this.platform.is('cordova')) { 
     Facebook.login(['public_profile', 'email']).then(facebookData => { 
     let provider = firebase.auth.FacebookAuthProvider.credential(facebookData.authResponse.accessToken); 
     firebase.auth().signInWithCredential(provider).then(firebaseData => { 
     this.af.database.list('users').update(firebaseData.uid, { 
      name: firebaseData.displayName, 
      email: firebaseData.email, 
      provider: 'facebook', 
      image: firebaseData.photoURL 
     }); 
     observer.next(); 
     }); 
    }, error => { 
     observer.error(error); 
    }); 
    } else { 
    this.af.auth.login({ 
     provider: AuthProviders.Facebook, 
     method: AuthMethods.Popup 
    }).then((facebookData) => { 
     this.af.database.list('users').update(facebookData.auth.uid, { 
     name: facebookData.auth.displayName, 
     email: facebookData.auth.email, 
     provider: 'facebook', 
     image: facebookData.auth.photoURL 
     }); 
     observer.next(); 
    }).catch((error) => { 
     console.info("error", error); 
     observer.error(error); 
    }); 
    } 
}); 

ありがとうございます!!!

+0

.next()は返されたObservableで呼び出されません。それはオブザーバーに呼び出されます。つまり、作成されたオブザーバブルがイベントを発生させます。 –

答えて

1

@tagunpを例に言ったのはいくつかの追加は、ここでは、next() & error()コールバックに変更されたそれは、その中に値の加入者へのオブザーバーからのメッセージをトリガーlink to jsbin

です。

var source = Rx.Observable.create(observer => { 
    Rx.Observable.range(0,5).subscribe(
     data => { 
     console.log(data) 
     if(data > 2) { 
     // conveys to the subscriber of source 
     // that values has changed 
     observer.next("greater than 2"); 
     } 
    } 
) 
}) 

source.subscribe(
    data => console.log(data) 
) 

Output:- 

0 
1 
2 
3 
"greater than 2" 
4 
"greater than 2" 
1

この関数はObservableを返します。次は、コールバックを処理するように加入者に通知します。電子メールクライアントのように動作し、複数のクライアントを開いて、「次の」電子メールが入ったときにメッセージを処理できます。

+0

ありがとう@targunpあなたの答えは確かに助けた。私は私の答えdo checkにリンクjsbinも添付しています。 –

関連する問題