3

Excuses d'avance si vous posez une question stupide. J'ai fait une recherche et je n'ai pas trouvé la réponse que je cherchais.Résultat de rapprochement d'une Promesse à un Observable

J'ai besoin de la valeur pour indice qui est retourné dans la promesse d'être transmis à mon Observable comme argument:

deleteFavorite(token: string, recipe: Recipe) { 

const userId = this.authService.getActiveUser().uid; 
let index: number; 

this.indexOfFavoriteToBeRemoved(recipe) 
    .then(
    index => { 
     console.log(index) 
    } 
); 

return this.http.delete(this.databaseAddress + userId + '/' + index + '.json?auth=' + token) 
    .map(
    (response: Response) => { 
     return response.json(); 
    } 
); 
} 

Répondre

3

Modifier la promesse d'observer ensuite utiliser flatMap pour chaîner ces observables, et vous peut retourner un observable.

import { Observable } from "rxjs/Observable"; 
import 'rxjs/add/observable/fromPromise'; 
import 'rxjs/add/operator/flatMap'; 
import 'rxjs/add/operator/map'; 
... 
deleteFavorite(token: string, recipe: Recipe): Observable<any> { 
    const userId = this.authService.getActiveUser().uid; 
    return Observable.fromPromise(this.indexOfFavoriteToBeRemoved(recipe)) 
     .flatMap(index => this.http.delete(this.databaseAddress + userId + '/' + index + '.json?auth=' + token)) 
} 

Ou changer l'observable à promettre et utiliser .alors à la chaîne ces promesses, et vous pouvez retourner une promesse

import 'rxjs/add/operator/toPromise'; 
import 'rxjs/add/operator/map'; 
... 
deleteFavorite(token: string, recipe: Recipe): Promise<any> { 
    const userId = this.authService.getActiveUser().uid; 
    return this.indexOfFavoriteToBeRemoved(recipe) 
     .then(index => this.http.delete(this.databaseAddress + userId + '/' + index + '.json?auth=' + token) 
      .map(
      (response: Response) => { 
       return response.json(); 
      } 
     ).toPromise() 
    ) 
}