Вызов обещания в пределах наблюдаемого

# #angular #typescript #firebase #angularfire

Вопрос:

То, что я пытаюсь сделать, — это иметь возможность асинхронно вызывать мое обещание getToken() из моей функции GetEmployees (), но не делая ее асинхронной моей функцией GetEmployees ().

Пожалуйста, любая идея и заранее большое вам спасибо.

работник.Обслуживание

 async getToken(): Promise lt; string gt; {  return await this._auth._token(); }  getEmployees(): Observable lt; EmpleadoTarjeta[] gt; {   const promiseSource = from(new Promise(async (resolve) =gt; {  await this.getToken().then(tokenUser =gt; resolve(tokenUser));  }));  let token: any;  promiseSource.subscribe(tokenPromise =gt; token = tokenPromise);  const httpHeaders: HttpHeaders = new HttpHeaders({  tokenJPA: token,  });   console.log(token);  return this._httpClient  .getlt;EmpleadoTarjeta[]gt;('API', { headers: httpHeaders }  )  .pipe(  map(response =gt; response.map(item =gt; new EmpleadoTarjeta(item))),  tap((empleados) =gt; {  this._empleados.next(empleados);  })  ); }  

_auth.сервис

 async _token(): Promiselt;stringgt; {  const auth = getAuth();  return auth.currentUser.getIdTokenResult(true).then(async token =gt; token.token); }  

Обновить

 getEmpleados(): Observablelt;EmpleadoTarjeta[]gt; {  // const token: any = from(this.getToken()).toPromise().then(tokenUser  =gt; tokenUser); const promiseSource: any = from(this.getToken()); const httpHeaders: HttpHeaders = new HttpHeaders({  tokenJPA: promiseSource.subscribe((tokenPromise: any) =gt; {  console.log(tokenPromise);  return tokenPromise;  }), });  return this._httpClient  .getlt;EmpleadoTarjeta[]gt;('http://localhost:5001/journeypadel/us-central1/fxManager_Empleados-empleadosRegistrados', { headers: httpHeaders }  )  .pipe(  map(response =gt; response.map(item =gt; new EmpleadoTarjeta(item))),  tap((empleados) =gt; {  this._empleados.next(empleados);  })  ); }  

Я сделал это таким образом, и это не сработало

Ответ №1:

Вы могли бы просто использовать его как:

 const promiseSource = from(this.getToken());  

Обновить

 getEmpleados(): Observablelt;EmpleadoTarjeta[]gt; {  return from(this.getToken())  .pipe(  map((tokenUser) =gt; new HttpHeaders({  tokenJPA: tokenUser  })),  switchMap((httpHeaders) =gt; this._httpClient  .getlt;EmpleadoTarjeta[]gt;(  'http://localhost:5001/journeypadel/us-central1/fxManager_Empleados-empleadosRegistrados',  { headers: httpHeaders }  )  .pipe(  map(response =gt; response.map(item =gt; new EmpleadoTarjeta(item))),  tap((empleados) =gt; {  this._empleados.next(empleados);  })  ))  ); }  

Комментарии:

1. смотрите мое обновление, пожалуйста

2. см. Обновленный ответ

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