0

我正在通過codebase進行angularfire認證,我無法理解這段代碼如何工作。可觀察到的下一個運營商使用混亂

基本上我很困惑如何使用observer.next()以及在哪種情況下。

據我所知,這種方法應該返回一個可觀察的,但如何做.next()它有幫助。

我也看過next()here的文檔,它的別名爲takelast

我仍然不明白這是如何工作在這裏。

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上調用。它在觀察者身上呼叫。總之,它使得創建的observable發出一個事件。 –

回答

1

只是一些除了什麼@tagunp用一個例子說,這裏是一個link to jsbin

它觸發從觀察者到裏面重視用戶的消息已經改變,next() & error()回調。

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你的答案肯定有幫助。我也在我的答案中附加了一個鏈接jsbin檢查。 –