Una promise (de l'anglès "promesa" aka Futures)
A promise to perform and action.
S'apliquen en el concepte de la programació asíncrona. Vegeu Programació asíncrona i
https://blog.risingstack.com/node-hero-async-programming-in-node-js/
Recursos:
A Javascript i altres llenguatges de programació asíncrons s'utilitzen molt els callbacks i sol sorgir el problema anomenat Callback Hell que bàsicament consisteix en cridar callbacks de forma piramidal/anidats tipus:
examplefunction( param1, function (){ // code here examplefunction2( param1, function (){ //code here examplefunction3( param1, function (){ /code here examplefunction4( param1, anothercallback...); }); }); });
Example:
fs.readdir(source, function (err, files) { if (err) { console.log('Error finding files: ' + err) } else { files.forEach(function (filename, fileIndex) { console.log(filename) gm(source + filename).size(function (err, values) { if (err) { console.log('Error identifying file size: ' + err) } else { console.log(filename + ' : ' + values) aspect = (values.width / values.height) widths.forEach(function (width, widthIndex) { height = Math.round(width / aspect) console.log('resizing ' + filename + 'to ' + height + 'x' + height) this.resize(width, height).write(dest + 'w' + width + '_' + filename, function(err) { if (err) console.log('Error writing file: ' + err) }) }.bind(this)) } }) }) } })
La causa és que sovint els programadors de Javascript venen d'altres llenguatges síncrons sense callback i tendeixen a escriure el codi de forma seqüencial tal i com els sembla que seria la execució "típica" de l'aplicació.
Solucions:
Vegeu l'exemple de la web:
http://callbackhell.com/
Recursos:
Vegeu Javascript Promises
Es pot assolir programació asíncrona utilitzant Laravel queues (concepte de Laravel Job)
Vegeu:
https://laracasts.com/series/learn-vue-2-step-by-step/episodes/21
i l'article Form Objects