我正在学习NativeScript / Angular 2,需要帮助解决这个问题。
为了在Firebase平台中实现多角色登录系统,我考虑了这个解决方案
/stores/
的{{1}}路径,其中store
字段与刚刚登录的电子邮件相同merchantEmail
服务中设置store
ID,该服务使用BackendService
来存储令牌,然后路由到getString/setString
MerchantDashboardComponent
这是我在BuyerDashboardComponent
:
login.service
在 login (email: string, password: string) {
return firebase.login({
type: firebase.LoginType.PASSWORD,
email: email,
password: password
}).then(
(result: any) => {
firebase.query(
(_result) => { // Here I set BackendService.storeID
回调中,我在应用程序中分配了我需要的令牌。
这是我在.query()
中使用的方法:
login.component
除了商家被路由到买方信息中心之外,一切都有效。我已经设法发现执行顺序不是我预期的,事实上:
doLogin () {
this.isAuthenticating = true;
if (!this.validateEmail()) {
alert("Please insert a valid email");
return false;
}
this.loginService.login(this.email, this.password).then(
() => {
this.isAuthenticating = false;
if (BackendService.loginError)
alert(BackendService.loginError)
else if (BackendService.storeID != '') {
this.router.navigate(['/merchant-dashboard'], {clearHistory: true});
}
else {
this.router.navigate(['/home/categories'], {clearHistory: true});
}
}
);
}
被执行并返回Promise firebase.login()
处理程序在.then()
方法doLogin()
方法才能完成回调并且我的令牌可用,但firebase.query()
已导航用户,因为{I}在我需要时仍然为空我希望我尽可能地清楚。 谢谢你的关注。
问候, 的Davide
答案 0 :(得分:1)
所以,问题出在登录服务方法中。
我现在返回 Promise
生成的firebase.query()
,这会导致then()
次调用以正确的顺序链接。
答案 1 :(得分:1)
是的,我确实打算将它包装在一个承诺中并创建一个链。
示例代码
return new Promise<any>((resolve, reject) => {
firebase.login({ loginArguments })
.then((result: any) => {
var onQueryEvent = function (result) {
};
return firebase.query(
onQueryEvent,
"/owner",
{
// query arguments follows here
}
).then(res => {
return res;
})
})
.then(finalResult => {
console.log(finalResult);
try {
resolve(finalResult);
} catch (e) {
reject(e);
}
})
});