On Github MarkBennett / a-promised-talk
var files = ['a.json','b.json','c.json'], resources = []; files.forEach(function(file) { loadFile({ success: function(content) { resources.push(content); if (files.length === resources.length) { // resources loaded createServer(function(server) { server.on_request = function(req) { // Handle request... }; server.listen(function() { app.registerServer(server, function(app, err) { if (err !== undefined) { app.error("Unable to register that this server is running."); } }); }, function(msg) { app.error("Unable to start server! " + msg); }); }, function(error) { app.error("Can't create the server"); }); } }, error: function(msg) { app.error("Unable to load file:" + msg); } }); });
var a_promise = retrieveFile(); a_promise.then(function(file) { // The awesome goes here });
var a_promise = retrieveFile(); a_promise.then(function(file) { // The awesome goes here }, function(rejection_msg) { // Optional, error handling for when the promise is rejected });
* Notice the output of the first, becomes the input to the second
retrieveFile().then(function(file) { return "returned from first promise"; }.then(function(input) { input === "returned from first promise"; });
var promise = retrieveFile(); // ..later on that same day promise.then(function(file) { // Even if the promise was resolved a long time before // you can still add a then() to access it's value. // Try doing that with a callback! });
function promised_val(input) { // Create a deferred to handle the promised value var deferred = Q.defer(); // do work setTimeout(function() { deferred.resolve("Awesome, " + input + "!"); }, 1000); // return the promise return deferred.promise; } promised_val("sauce").then(function(val) { console.log(val); });
retrieveFile().then(function(file) { // Triggered after the file is retrieved var deferred = Q.defer(), promise = deferred.promise; setTimeout(function() { deferred.resolve("A promised value"); }, 5000); return promise; }.then(function(val) { // Logs "A promised value" after 5 seconds console.log(val); });
var array_of_values = [1, 2, 3], array_of_promises = array_of_values.map(promise_returning_func); Q.all(array_of_promises). then(function(array_of_outputs) { // Called after all the promises are fullfilled, // with an array of the values from each promise }).fail(function() { // Triggered if any of the promises in the array fail });
function loadFile(file_path) function createServer(content) server.prototype.listen = function() app.registerServer = function(server)
var files = ['a.json','b.json','c.json']; Q.all(files.map(loadFile)). then( function(content) { // resources loaded return createServer(content); }, function(msg) { app.error("Unable to load file:" + msg); } ). then( function(server) { // Server created server.on_request = function(req) { // Handle request... }; return server.listen(); }, function(err_msg) { app.error("Can't create the server"); } ). then( function(server) { // Server is listening return app.registerServer(server); }, function(err_msg) { app.error("Unable to start server! " + msg); } ). then(undefined, function(err_msg) { app.error("Unable to register that this server is running."); });
var files = ['a.json','b.json','c.json']; Q.all(files.map(loadFile)). then(function(content) { // resources loaded return createServer(); }). then(function(server) { // Server created server.on_request = function(req) { // Handle request... }; return server.listen(); }). then(function(server) { // Server is listening return app.registerServer(server); }). fail(function(err_msg) { app.error("Unable to initialize server. Root cause = " + err_msg); });
try { createServer(); server.on_request = function(req) { /* snip */ }; server.listen(); app.registerServer(server); } catch (err) { app.error("Unable to initialize server. Root cause = " + err_msg); }