gpt4 book ai didi

javascript - 当第一个可观察值需要在第二个中时,如何在 angular2 中链接两个可观察值

转载 作者:搜寻专家 更新时间:2023-10-30 21:59:17 26 4
gpt4 key购买 nike

我想在 Angular 中链接两个 observable,其中第二个 observable 函数需要第一个 observable 的输出作为参数。

我创建了一个这样的可观察对象:

storeData(response: any): Observable<any> {
return Observable.create((observer) => {
// storing the data in localstorage
this.storage.ready().then(() => {
this.storage.set('USERACCESSTOKEN', response.token).then(() => {
this.storage.set('USERROLE', response.user_role).then(() => {
delete response.token;
this.storage.set('USERDATA', response).then(() => {
this.setLoggedIn(true);
observer.complete();
})
})
})
})
});
}

我想像这样在我的登录页面中使用:

login(form: any, event: Event): void {
this.authService.otpVerify(form)
.switchMap((data) => this.authService.storeData(data))
.subscribe(response => {
if(this.navCntrl.canGoBack())
this.navCntrl.pop();
else
this.navCntrl.setRoot('TabsPage');
}, (err)=>{
console.log("your credentials doesn't match");
});
}

这里来自 otpVerify,我会得到这样的响应:

{
"success" : true,
"message" : "Login success",
"token" : "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJod…n19fQ.EMMT6wJeoF7Y52c3UQzgw3rkTY0WduGYq...........",
"name" : "Jony",
"user_role" : "editor"
}

在这里 在正确的凭证检查之后,我还想检查 user_role。如果 user_role 与响应匹配(编辑器或订阅者),则只有它会转到 switchMap((data) => this.authService.storeData(data)) block ,否则它会显示 This role not允许 对话框和数据也未存储。 [我没有在这里添加这个逻辑,因为我不知道该怎么做。但这就是我要寻找的]。

AuthService 中的

otpVerify 函数是这样的:

 otpVerify(body: any): Observable<any> {
let headers = new Headers();
headers.append('Content-Type', 'application/json');
this.options = new RequestOptions({ headers: headers });
return this.http.post(AppSettings.API_ENDPOINT2 + 'login', body, this.options)
.map(response => response.json())
.catch(this._errorHandler);
}

在这个 otp 验证之后,我还想设置条件以查看它是否是有效用户。如果一切顺利,我将存储数据,否则显示一些错误消息。请帮我解决这个问题。

最佳答案

好的,根据我对您最近编辑的了解,这将为我们提供以下内容:

login(form: any, event: Event): void {
this.authService.otpVerify(form)
.switchMap(
(data: any) => {
if (data.user_role === "editor" || data.user_role === "subscriber") {
return this.authService.storeData(data);
} else {
console.log("Insufficient privileges");
}
},
(err) => console.log(err))
.subscribe(() => {
if (this.navCntrl.canGoBack()) {
this.navCntrl.pop();
} else {
this.navCntrl.setRoot('TabsPage');
}
});
}

switchMap 中的代码会检查 Angular 色并仅在权限足够时才调用 storeData

关于javascript - 当第一个可观察值需要在第二个中时,如何在 angular2 中链接两个可观察值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47453280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com