大家好我身边有搜索小时,想尽一切诸如此类BehaviorSubject or ReplaySube或Events但unsuccessfull ..角2发送回调服务组件
问题
我有一个个人主页,其中一个按钮loginFb()
其中调用我的users.services。这项服务FacebookAPI调用数据,并将它们发送到数据库。现在它会很酷发回一个“回调”到我的组件与用户对象:)
因为当我(点击)在登录时,我看到Firebase中的新用户,但我的页面没有“刷新”,我想这是因为我的异步太晚了..?
这里是我的profile.ts(ProfilePage)
import { Users } from '../../services/users.service';
export class ProfilePage {
user :any;
isConnected :boolean = false;
constructor(public navCtrl: NavController,
public usersService: Users,
public modalCtrl: ModalController) { }
loginFB(){
this.usersService.registerUserFb();
this.usersService.getUserFacebook().subscribe((userObject) => {
this.user = userObject;
})
}
}
在这里,我users.services.ts
getUserFacebookId(){
Facebook.getLoginStatus().then((response) => {
alert("id in getUSERFACEBOOKID = " + JSON.stringify(response.authResponse.userID));
return response.authResponse.userID;
});
}
getUserFacebook(){
return this.af.database.object('users/' + this.getUserFacebookId());
}
registerUserFb(){
Facebook.login(['email']).then((response) => {
Facebook.getLoginStatus().then((response) => {
if(response.status == 'connected'){
this.checkIfUserExists(response.authResponse.userID);
}
});
});
}
checkIfUserExists(uid) {
let user = this.af.database.object('users/' + uid, { preserveSnapshot: true });
user.subscribe(snapshot => {
if(!snapshot.exists()) {
this.saveInDatabase(uid);
}
});
}
saveInDatabase(uid){
Facebook.api('/' + uid +
'?fields=id, name, ...])
.then((data) => {
var newUser = {
//data saving
};
this.af.database.object('users/' + uid).set(newUser);
this.showToast("User successfully registered");
});
}
我不是'Observable'专家,但我认为这个问题来自于'registerUserFb'函数在您调用'getUserFacebook'时尚未完成的事实。我认为你称之为“registerUserFb”,并且在承诺完成之前,你调用'getUserFacebook',这样你就什么也没有(因为承诺没有完成),当它完成时,你不会在你的'observable'上发射任何东西,因此,您的订户不知道用户已更改。我想你应该在你的服务中引用你的'observable',并在'if'中检查用户是否连接,调用其''emit''函数。 – ssougnez