exécutée au sein de celle-ci. ! var talk = document.getElementById("talk"); talk.addEventListener("click", function(event){ alert("You chose a talk"); }); ! $('#talk').click(function(event) { alert("You chose a talk"); });
console.log(data); }); function mainCode(callback){ doSomething(); callback(); } ! function myCallback(){ console.log("This is my callback"); } ! mainCode(myCallback);
sql = 'SELECT * FROM users WHERE name=?'; query(sql, name, function (error, user ) { //personne ne récupère cette valeur return user; }); } function getUser (name, callback) { var sql = 'SELECT * FROM users WHERE name=?'; query(sql, name, function (error, user ) { //personne ne catch l'exception if(error) throw error; }); }
inspiré du langage E (Mark Miller) • Principe bcp utilisé en dehors du JS • 1re version des specs par le groupe CommonJS • Spéc actuelle Promises/A+ • Ember, Angular, Dojo, etc.
qui aura, à un moment, une valeur. 3 états possibles : • Pending • Fulfilled (renvoie une valeur) • Rejected (renvoie une raison) ! Permet de retrouver les bénéfices du synchrone : return, throw, catch, re-throw
handler appelé renvoie : ! • une valeur : transformedPromise passera à l’état « resolved » avec cette valeur ! • une promise : transformedPromise adopte son état ! Si le handler appelé renvoie une exception, transformedPromise passera en « rejected » avec l’exception renvoyée. !
var Q = require("q"); var Connection = require("q-comm"); var remote = Connection(port, local); // a promise for a remote object! var userPromise = remote.getUser(); twitter.com/domenic Q.js
Promises (gestion de quota, événements de chargement de pontes, ServiceWorker, .… ! Implémentation native partielle dans certains navigateurs. ! Chrome : promesses activées par défaut dans Canary. Firefox : la dernière nightly, intègre les promesses. ! Pas encore d’implémentation complète ou conforme à 100% !