Q) Comment convertir l'observable suivant en une promesse afin de pouvoir l'appeler avec .then(...)
?
Ma méthode que je veux convertir en promesse:
this._APIService.getAssetTypes().subscribe(
assettypes => {
this._LocalStorageService.setAssetTypes(assettypes);
},
err => {
this._LogService.error(JSON.stringify(err))
},
() => {}
);
La méthode de service qu'il appelle:
getAssetTypes() {
var method = "assettype";
var url = this.apiBaseUrl + method;
return this._http.get(url, {})
.map(res => <AssetType[]>res.json())
.map((assettypes) => {
assettypes.forEach((assettypes) => {
// do anything here you might need....
});
return assettypes;
});
}
Merci!
rxjs6
https://github.com/ReactiveX/rxjs/issues/2868#issuecomment-360633707
Ne pas pipe. C'est sur l'objet Observable par défaut.
Observable.of('foo').toPromise(); // this
rxjs5
import 'rxjs/add/operator/toPromise';
import 'rxjs/add/operator/map';
...
this._APIService.getAssetTypes()
.map(assettypes => {
this._LocalStorageService.setAssetTypes(assettypes);
})
.toPromise()
.catch(err => {
this._LogService.error(JSON.stringify(err));
});
observable peut être converti en promesse comme ceci:
let promise=observable.toPromise();
vous n'avez pas vraiment besoin de faire cela, faites-le ...
import 'rxjs/add/operator/first';
this.esQueryService.getDocuments$.first().subscribe(() => {
event.enableButtonsCallback();
},
(err: any) => console.error(err)
);
this.getDocuments(query, false);
first () garantit que le bloc subscribe n'est appelé qu'une seule fois (après quoi, ce sera comme si vous n'aviez jamais souscrit), exactement comme une promesse then ()
La bonne façon de faire observable une promesse, dans votre cas, serait de suivre
getAssetTypesPromise() Observable<any> {
return new Promise((resolve, reject) => {
this.getAssetTypes().subscribe((response: any) => {
resolve(response);
}, reject);
});
}