javascript - observables - Convertir una promesa en observable
promesas vs observables (3)
tratando de convertir la primera función de promesa de swal en observable e intentando usar la acción de cancelar. ¿Puede alguien ayudarme con la sintaxis por favor?
swal({
title: ''Are you sure?'',
text: "You won''t be able to revert this!",
type: ''warning'',
showCancelButton: true,
confirmButtonColor: ''#3085d6'',
cancelButtonColor: ''#d33'',
confirmButtonText: ''Yes, delete it!'',
cancelButtonText: ''No, cancel!'',
confirmButtonClass: ''btn btn-success'',
cancelButtonClass: ''btn btn-danger'',
buttonsStyling: false
}).then(function () {
swal(
''Deleted!'',
''Your file has been deleted.'',
''success''
)
}, function (dismiss) {
// dismiss can be ''cancel'', ''overlay'',
// ''close'', and ''timer''
if (dismiss === ''cancel'') {
swal(
''Cancelled'',
''Your imaginary file is safe :)'',
''error''
)
}
})
Hasta ahora tengo lo siguiente:
export class DialogService {
confirm(title: string, message: string):Observable<any> {
return Observable.fromPromise(swal({
title: title,
text: message,
type: ''warning'',
showCancelButton: true
}));
}; }
¿Cómo agrego la function (dismiss)
en el cuadro anterior?
No estoy seguro de que swal
use la API nativa de Promise
, creo que usa una biblioteca de promesas para JavaScript como q u otra cosa.
export class DialogService {
confirm(title: string, message: string):Observable<any> {
return Observable.create( (observer: any) => {
swal({
title: title,
text: message,
type: ''warning'',
showCancelButton: true
}).then((data)=>{
observer.next(data);
},(reason)=>{
observer.error(reason);
})
})
}
}
Nvm, terminé con lo siguiente, ..
return Observable.create((observer) => {
if (component.isUntouched()) {
observer.next(true);
} else {
swal({
title: ''Sure?'',
text: ''Not saved, are you sure?'',
type: ''warning'',
showCancelButton: true
}).then(() => {
observer.next(true);
}, () => {
observer.next(false);
})
}
});
Para completar, el component.isUntouched()
se define de la siguiente manera:
@ViewChild(''appForm'') appForm: NgForm;
...
isFormTouched():boolean{
return this.eventForm.dirty;
}
Y en la plantilla / html:
<form class="form form-horizontal" (ngSubmit)="submitEvent()" #appForm="ngForm">
..
</form>
Una vez que se suscribe al Observable, puede pasar el caso de ''captura'' de Promesa.
const subscription = Observable.fromPromise(...).subscribe(
function () {
console.log(''Deleted!'');
},
function (dismiss) {
console.log(''Dismiss'', dismiss);
})
Tenga en cuenta que esto solo funcionará si es una especificación válida de Promises / A +.
Más información aquí: https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/frompromise.md