Это первый раз, когда я попробовал это и не работает, кто-то может привести пример? Что я пытаюсь сделать, когда вы нажимаете кнопку входа в систему, чтобы вы могли сделать только один просьба к API не более, но мне нужно это сделать с помощью наблюдаемых, теперь у меня есть обещания. Как я могу это сделать?
- Отключенный атрибут - это тот, который отключил или нет моей кнопки
Это мой файл TS, где я ограничиваю запросы, но с обещаниями
async sendAdmin(){
this.bSignIn = true;
let formData = new FormData();
formData.append('email', this.loginForm.get('email').value);
formData.append('password', this.loginForm.get('password').value);
this.disabled = true;
// using delay for http response
await this.delay(3000);
this.disabled = false;
this.adminService.validateAdminCredentials(formData)
.subscribe(
res => {
this.bSignIn = false;
let auxRes: any = res;
if(auxRes.type == 'success'){
let auxUser = {
firstName: auxRes.first_name,
personId: auxRes.id,
clientId: auxRes.client_id
}
this.isSigned = true;
localStorage.setItem('leadLoggedAdmin', JSON.stringify(auxUser));
this.goToAdminDashboard(auxRes.first_name);
}
},
err => {
this.bSignIn = false;
this.openSnackBar(this.snackMessage);
this.loginForm.reset();
}
);
}
private delay(ms: number){
return new Promise(resolve => setTimeout(resolve, ms));
}
* Это то, что я пытался, но не работает *
async sendAdmin(){
this.bSignIn = true;
let formData = new FormData();
formData.append('email', this.loginForm.get('email').value);
formData.append('password', this.loginForm.get('password').value);
this.disabled = true;
this.adminService.validateAdminCredentials(formData)
.pipe(
delay(200),
mergeMap(() => this.myObservable()),
tap(() => this.disabled = false)
)
.subscribe(
res => {
this.bSignIn = false;
let auxRes: any = res;
if(auxRes.type == 'success'){
let auxUser = {
firstName: auxRes.first_name,
personId: auxRes.id,
clientId: auxRes.client_id
}
this.isSigned = true;
localStorage.setItem('leadLoggedAdmin', JSON.stringify(auxUser));
this.goToAdminDashboard(auxRes.first_name);
}
},
err => {
this.bSignIn = false;
this.openSnackBar(this.snackMessage);
this.loginForm.reset();
}
);
}
private myObservable() {
const observable = Observable.create(observer => {
observer.next();
observer.complete();
});
return observable;
}
ValidateAdminCredential функция, которая имеет конечную точку и apiurl
validateAdminCredentials(user: any){
return this.http.post(this.API_URL+'NONE-NONE-2/'+ENDPOINT_NAME+'/login/', user, this.httpOptions);
}
* Небольшой пример стека, который я использую *