typescript - example - promise angular 6
Angular 2: Convertir observable en promesa (4)
La forma correcta de hacer que Observable sea una promesa, en su caso sería seguir
getAssetTypesPromise() Observable<any> { return new Promise((resolve, reject) => { this.getAssetTypes().subscribe((response: any) => { resolve(response); }, reject); }); }
P) ¿Cómo convierto lo siguiente observable en una promesa para poder llamarlo con .then(...)
?
Mi método que quiero convertir en una promesa:
this._APIService.getAssetTypes().subscribe(
assettypes => {
this._LocalStorageService.setAssetTypes(assettypes);
},
err => {
this._LogService.error(JSON.stringify(err))
},
() => {}
);
El método de servicio que llama:
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;
});
}
¡Gracias!
Observable se puede convertir para prometer así:
let promise=observable.toPromise();
realmente no necesitas hacer esto solo hazlo
import ''rxjs/add/operator/first'';
this.esQueryService.getDocuments$.first().subscribe(() => {
event.enableButtonsCallback();
},
(err: any) => console.error(err)
);
this.getDocuments(query, false);
first () garantiza que el bloque de suscripción solo se llame una vez (después de lo cual será como si nunca se hubiera suscrito), exactamente lo mismo que una promesa y luego ()
rxjs6
https://github.com/ReactiveX/rxjs/issues/2868#issuecomment-360633707
No la pipa Está en el objeto observable por defecto.
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));
});