2017-01-15 4 views
5

Я пытаюсь получить данные из своей Firebase с помощью AngularFire2. Я хочу проверить конкретные данные, и после того, как я получу эти данные из Firebase, я могу проверить его только в определенной области, а не после операции с Firebase. Почему это происходит?Данные доступа AngularFire2 после извлечения

Ниже мой код:

this.af.database.list('/users/1qfcMAQnglX9jsW5GdLpPko1HqE2', { preserveSnapshot: true}) 
.subscribe(snapshots=>{ 
    snapshots.forEach(snapshot => { 
     if(snapshot.key=="reg_boolean"){ 
     console.log(snapshot.val()); 
     this.bo=snapshot.val(); 
     } 
     this.currentUser.push({key:snapshot.key,value:snapshot.val()}); 
     console.log(this.currentUser); 
     //console.log(snapshot.key, snapshot.val()); 
     if(this.bo==true){console.log("happy"); }; //i can access only in this scope 
    }); 

}) 
if(this.bo==true){console.log("happy"); }; //why i can access this value??it's undefined, this happen before the subscribe with angularfire2 

enter image description here

+1

ответ Виктора объясняет, но я также направить вас на эти вопросы ссылочных: [? Как вернуть ответ от асинхронного вызова] (http://stackoverflow.com/q/14220321 /), [Переменные, установленные во время функции $ .getJSON, доступны только внутри функции] (http://stackoverflow.com/q/1739800) и [jQuery: возвращать данные после успешного успеха ajax] (http://stackoverflow.com/1/5316697). –

ответ

8

Это не определенно, потому что this.af.database.list это асинхронное, так что код в subscribe будет выполняться, когда this.af.database.list делает извлечение данных. Поэтому, когда код попал в строку if(this.bo==true){console.log("happy"); }; У него ничего нет, потому что подписка не закончилась вообще.

Подпишитесь, это похоже на старое обещание, но теперь оно работает с rxjs. Я рекомендую вам изучить его, потому что угловой и ионный много внимания уделяют этому.

Попробуйте посмотреть на https://www.learnrxjs.io/

+0

Виктор у вас есть решение для меня сейчас или что-то может решить эту проблему? потому что я не уверен, как работать с rxjs. –

+0

@AdirZoari, что вы хотите делать с данными? –

+0

хорошо, я объясняю вам в целом. после регистрации в свой первый раз он создает учетную запись и заполняет все необходимые данные (название отдела, год), я устанавливаю значение reg_boolean в true, если в следующий раз, когда он войдет в приложение, он проверяет данные, если reg_boolean истинно поэтому ему не нужно выбирать название отдела и год, чтобы он был на главной странице и не подписывался. –

Смежные вопросы