Carlos Padial
All-media-Artist · Visual Craftsman · Creative Developer · Experience Designer · Interactive Researcher ·
cuantos estados tiene una promesa?
una promesa tiene tres únicos estados:
una promesa tiene cuatro únicos estados:
cuando la promesa es un problema, se considera:
Llamaron quedo, muy quedo,
a la puerta de tu casa...
Villaespesa,
¿has escuchado?
tocan la puerta...
La fiebre te hace
desvariar.
Estoy citado con una muerta,
y un día de éstos ha de llamar...
Llevarme pronto me ha prometido;
a su promesa no ha de faltar...
Tocan la puerta. Qué, ¿no has oído?
la fiebre te hace desvariar.
y ahora, también en javascript
100% código nativo
Una Promise (promesa en castellano) es un objeto que representa la terminación o el fracaso eventual de una operación asíncrona.
Las promesas sirven para domesticar funciones asíncronas.
var myPromise = new Promise(function(resolve, reject) {
// Esto es solo un ejemplo para crear asincronismo
window.setTimeout( function() {
resolve('promesa finalizada');
}, Math.random() * 2000 + 1000);
} );
myPromise.then(function (result) {
console.log(result)
});var myPromise = function(time) {
if (!time) time = Math.random() * 2000 + 1000;
var promise = new Promise((resolve, reject) => {
if (time > 0) {
window.setTimeout(function() {
resolve('myPromise_Finished in ' + time + ' secs');
}, time);
} else {
reject('not a positive integer')
}
});
return promise;
};
myPromise(1000).then((result) => {
console.log(result);
});diferente de la original
EZModelScene.prototype.setBuildingActiveAndGetTexture = function(buildingId, skipSetup) {
var promise = new Promise((resolve, reject) => {
if (!skipSetup) {
skipSetup = false;
}
ez3dScene.setActive(buildingId)
.then(result => {
ez3dScene.active.getTexture(skipSetup)
.then((result) => {
resolve({status: 'FINISHED'});
})
.catch((error) => {
reject({status: 'CANCELLED', error: error});
})
})
.catch((error) => {
reject({status: 'CANCELLED', error: error});
});
});
return promise;
};myPromise
.then((result) => {
// do something
})
.catch((error) => {
// do something
})
.finally((result) => {
// do something
});myPromise
.then(exitoCallback, falloCallback);
myPromise
.catch(falloCallback);
myPromise
.then(null, falloCallback);
se pueden encadenar catch y then...
new Promise((resolver, rechazar) => {
console.log('Inicial');
resolver();
})
.then(() => {
throw new Error('Algo falló');
console.log('Haz esto');
})
.catch(() => {
console.log('Haz eso');
})
.then(() => {
console.log('Haz esto sin que importe lo que sucedió antes');
});hazAlgo()
.then(resultado => hazAlgoMas(valor))
.then(nuevoResultado => hazLaTerceraCosa(nuevoResultado))
.then(resultadoFinal => console.log(`Obtenido el resultado final: ${resultadoFinal}`))
.catch(falloCallback);
var divideNumber = function(value) {
return new Promise((resolve, reject) => {
value = value / 2;
console.log(value);
resolve(value);
})
.then((result) => {
if (result > 1) {
return divideNumber(result);
}
console.log('final result: ' + result)
})
};
divideNumber(200)Se puede crear un iterable de promesas para ejecutarlas en lote...
var promisesArray = [myPromise(100), myPromise(3000), myPromise(10000)];existen dos métodos para ello:
var promisesArray = [myPromise(100), myPromise(3000), myPromise(10000)];
Promise.all(promisesArray)
.then(result => {
console.log(result);
})
.catch(error => {
console.log(error)
});pero...
var promisesArray = [myPromise(100), myPromise(3000), myPromise(10000)];
Promise.race(promisesArray)
.then(result => {
console.log(result);
})
.catch(error => {
console.log(error)
});Se puede crear un iterable de promesas para ejecutarlas en lote...
var promisesArray = [myPromise(100), myPromise(3000), myPromise(10000)];var bigPromise = promisesArray.reduce((accumulatorPromise, promise) => {
return accumulatorPromise.then((result) => {
return promise;
});
}, Promise.resolve());
bigPromise
.then(result => {
console.log(result);
})
.catch(error => {
console.log(error);
});
By Carlos Padial
All-media-Artist · Visual Craftsman · Creative Developer · Experience Designer · Interactive Researcher ·