Вы пробовали first()
вместо take(1)
В зависимости от вашего импорта на уровне модуля вы можете добавить импорт для оператора first.
import 'rxjs/add/operator/first'
Хотя на самом деле это не отменяет подписку, это завершает наблюдение, что, как я полагаю, и имелось в виду.
РЕДАКТИРОВАТЬ: добавление явного способа отмены подписки, как это было первоначально запрошено OP
Результат .subscribe(...) вернет обработчик подписки. Вы можете использовать этот дескриптор, чтобы явно отменить подписку, и код будет выглядеть так:
let subscription = this.auth.getUserData().take(1).subscribe(data => { // the take(1) doesn't work
console.log('Firebase responded with success.');
this.rootPage = TabsPage;
subscription.unsubscribe();
}, err => {
console.log('Firebase responded with error.', err);
this.rootPage = LoginEmailPage;
}
);
Хотя явно отменять подписку в этом случае кажется неправильным, распространенным шаблоном является создание подписки в ngOnInit()
или на основе событий post init и отмена ожидающих подписок в ngOnDestroy()
.
person
Ben Dadsetan
schedule
26.07.2016