Trabajo como desarrollador/ingeniero de sistemas
Una promesa representa un posible resultado:
Puede estar en uno de los siguientes estados:
Se garantiza que:
function getUser(id, callback){
$.get('/api/users/'+id, function(datos){
callback(datos);
});
};
getUser(5,function(user){
console.log('Nombre: '+user.name);
})
getUser(id, function(user){
getTwits(user.twitterId, function(twits){
muestraTwits(twits);
});
});
var twits, fbFriends, searchResults;
getTweets(user.twitterId, function(result){
twitts=result;
resultadoObtenido();
});
getFbFriends(user.fbId, function(result){
fbFriends=result;
resultadoObtenido();
});
searchGoogle(user.name, function(result){
searchResults=result;
resultadoObtenido();
});
var resultados=0;
function resultadoObtenido(){
if(++resultados === 3)
showUserDashboard(twits,fbFriends,searchResults);
};
function obtenerTamañoTotal(directorio, callback){
fs.readDir(directorio, function(error, archivos){
var leidos = 0;
var total = 0;
function leido(){
if (++leidos === archivos.length)
callback(total);
};
archivos.forEach(function(nombre){
fs.readFile(nombre, function(error, archivo){
total += archivo.length;
leido();
});
});
});
});
paso1(function(valor1){
paso2(valor1, function(valor2){
paso3(valor2, function(valor3){
paso4(valor3, function(valor4){
paso5(valor4, function(valor6){
//haz algo con valor6
});
});
});
});
});
readDir(path, function(error, fileList){
//hago cosas
});
var fileListPromise = readDir(path);
function siCumplida(fileList){
//hago cosas
}
function siRechazada(error){
//hago otras cosas
}
fileListPromise.then(siCumplida, siRechazada);
var otraPromesa = unaPromesa.then(siCumplida, siRechazada);
-Si siCumplida/siRechazada devuelve un valor, la promesa otraPromesa se resolverá con ese valor:
promesaPaso1
.then(promesaPaso2)
.then(promesaPaso3)
.then(promesaPaso4)
.then(promesaPaso5)
.then(function(valor6){
//haz algo con valor6
});
var user = getUser();if(user === null)throw new Error("user is null");//Con promesasvar userPromise = getUser().then(function(user){if(user === null)throw new Error("user is null");return user;});
try{updateUser(data);catch(err){console.log("Hubo un error",err);}//Con promesasvar updatePromise = updateUser(data).then(function(updatedUser){console.log('Updated user: ',updatedUser);}, function(error){ console.log('Hubo un error:',error});
try{updateUser(data);catch(err){throw new Error('Fallo actualizar el usuario: '+err.message);}//Con promesasvar updatePromise =updateUser(data).then(undefined, function(error){throw new Error('Fallo actualizar el usuario: '+err.message);});
getUser(1,function(err,user){if(err){showError(err);}else{getTwits(user, function(err,twits){if(err){showError(err);}else{showTwits(twits);}})}});//Con promesas:getUser(1).then(getTwits).then(showTwits,showError);
//Es resuelta con un array de resultados, o rechazada si alguna de las promesas es rechazadaall([ getUser(1), getColour("green") ]);//Es resuelta cuando cualquiera de las promesas se resuelve, o se rechaza si todas son rechazadasany([ hazAlgoConUsuario(1), hazOtraCosaConUsuario(1) ]);//Si una funcion acepta una promesa como parámetro y otra función devuelve una promesa, las podemos combinarmiFuncion1("hola", miFuncion2("mundo"));
var promesaDeVerdad=Q(jQueryPromise);var promesaDeverdad=when(jQueryPromise);
throw new Error('Ayyy!');var promesa = hazAlgo().then(function(){throw new Error('Ayyy!');});
dameUnaPromesa().then(function(resultado){console.log("Resultado",resultado);}).done();
ui.startSpinner();hazCosa().then(hazOtraCosa).then(mueveResultado).catch(muestraError).finally(ui.stopSpinner).done();
Q.all([getUser(),getColor()]) .then(function(results){ console.log('User: ', results[0]); console.log('color: ', results[1]); }) .done();//Con spread Q.all([getUser(),getColor()]) .spread(function(user, color){ console.log('User: ', user); console.log('color: ', color); }) .done();
var userIds=["1", "3", "40"];Q.all(userIds.map(getUserById)).then(function(users){console.log("Usuarios: ",users);}).done()
var readFile = Q.denodeify(fs.readFile);var readDir = Q.denodeify(fs.readDir);readDir("~").then(function(files){return files[0]}).then(readFile).then(function(data){console.log('el fichero contiene: ',data);}).catch(function(error){console.log('ocurrió un error: ',error);}).done();