0

Я собирался хотя бы codebase для аутентификации углового огня, и я не мог понять, как работает этот кусок кода.Наблюдаемая следующая путаница использования оператора

В основном я смущен тем, как используется 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. Он называется наблюдателем. Короче говоря, это заставляет созданное наблюдаемое излучать событие. –

ответ

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

Функция возвращает наблюдаемую, следующую и ошибки сигнализирует подписчику о возврате вызова. Работает как почтовый клиент, вы можете открыть несколько клиентов, и когда приходит «следующее» письмо, они обрабатывают сообщение.

+0

Спасибо @targunp, что ваш ответ наверняка помог. Я также добавил ссылку jsbin в свой ответ, чтобы проверить. –