45
ASYNC ALL AROUND US FRANCISCO MS FERREIRA @fmsf303

Async all around us (promises)

Embed Size (px)

DESCRIPTION

25 min tech talk around javascript promises and futures

Citation preview

Page 1: Async all around us (promises)

ASYNC ALL AROUND USFRANCISCO MS FERREIRA

@fmsf303

Page 2: Async all around us (promises)

JSPromises

Page 3: Async all around us (promises)

JavaCompletable

Futures

JSPromises

Page 4: Async all around us (promises)

DartFutures

JavaCompletable

Futures

JSPromises

Page 5: Async all around us (promises)

Async

COMMONPROBLEM

Page 6: Async all around us (promises)
Page 7: Async all around us (promises)

exports.saveWeekAvailability = function(req, res){ console.log("-- SAVE WEEK AVAILABILITY --"); weekData = req.body; var resultArr = []; for (var i=0; i< weekData.length; i++) { resultArr[i] = Availability(weekData[i]).save(function(err, result){ return result; }); } console.log("-- Result Arr --"); console.log(resultArr); };

MY CODE DOESN’T WORK

Page 8: Async all around us (promises)

resultArr[i] = Availability(weekData[i]).save(function(err, result){ return result; });

MY CODE DOESN’T WORK

Page 9: Async all around us (promises)

MY CODE DOESN’T WORK

router.get('/about', function(req, res) {

var animalsData = sequelize.query("SELECT * FROM animals").success(function(rows) { return rows; }); console.log(animals); // returns 'undefined'

var humansData = sequelize.query("SELECT * FROM humans").success(function(rows) { return rows; }); console.log(humans); // returns 'undefined'

res.render('about', { animals: animalsData, humans: humansData });});

Page 10: Async all around us (promises)

PYRAMID OF DOOM

router.get('/about', function(req, res) {

sequelize.query("SELECT * FROM animals").success( function( animals ) { sequelize.query("SELECT * FROM humans").success( function( humans ) { res.render('about', { animals: animalsData, humans: humansData }); }); }); });

Page 11: Async all around us (promises)
Page 12: Async all around us (promises)
Page 13: Async all around us (promises)

JAVA

public CompletableFuture<String> ask() { final CompletableFuture<String> future = new CompletableFuture<>(); //... return future;}

Page 14: Async all around us (promises)

JAVA

public CompletableFuture<String> ask() { final CompletableFuture<String> future = new CompletableFuture<>(); //... return future;}

future.complete("42");

Page 15: Async all around us (promises)

JAVA

public CompletableFuture<String> ask() { final CompletableFuture<String> future = new CompletableFuture<>(); //... return future;}

future.complete("42");

future.get(); // this will block execution

Page 16: Async all around us (promises)

DART

void printDailyNewsDigest() { File file = new File("dailyNewsDigest.txt"); Future future = file.readAsString(); future.then((content) { print(content); });}

Page 17: Async all around us (promises)

DART

Future<Item> getItem(){ var completer = new Completer();

// At some time you need to complete the future: completer.complete(new Item());

return completer.future;}

Page 18: Async all around us (promises)

PROMISES

this.updateEmailsInDatabase = function() { var fetchEmailDeferer = Q.defer();

inboxHandler .listMessages() .then( saveMessagesFromEmailServerLocally ) .then( fetchEmailDeferer.resolve ) .done();

return fetchEmailDeferer.promise; };

Page 19: Async all around us (promises)

PROMISES

this.updateEmailsInDatabase = function() { var fetchEmailDeferer = Q.defer();

inboxHandler .listMessages() .then( saveMessagesFromEmailServerLocally ) .then( fetchEmailDeferer.resolve ) .done();

return fetchEmailDeferer.promise; };

Page 20: Async all around us (promises)

PROMISES

this.updateEmailsInDatabase = function() { var fetchEmailDeferer = Q.defer();

inboxHandler .listMessages() .then( saveMessagesFromEmailServerLocally ) .then( fetchEmailDeferer.resolve ) .done();

return fetchEmailDeferer.promise; };

Page 21: Async all around us (promises)

PROMISES

this.updateEmailsInDatabase = function() { var fetchEmailDeferer = Q.defer();

inboxHandler .listMessages() .then( saveMessagesFromEmailServerLocally ) .then( fetchEmailDeferer.resolve ) .done();

return fetchEmailDeferer.promise; };

Page 22: Async all around us (promises)

PROMISES

this.updateEmailsInDatabase = function() { var fetchEmailDeferer = Q.defer();

inboxHandler .listMessages() .then( saveMessagesFromEmailServerLocally ) .then( fetchEmailDeferer.resolve ) .done();

return fetchEmailDeferer.promise; };

Page 23: Async all around us (promises)

PROMISES

this.updateEmailsInDatabase = function() { var fetchEmailDeferer = Q.defer();

inboxHandler .listMessages() .then( saveMessagesFromEmailServerLocally ) .then( fetchEmailDeferer.resolve ) .done();

return fetchEmailDeferer.promise; };

Page 24: Async all around us (promises)

PROMISES

this.updateEmailsInDatabase = function() { var fetchEmailDeferer = Q.defer();

inboxHandler .listMessages() .then( saveMessagesFromEmailServerLocally ) .then( fetchEmailDeferer.resolve ) .done();

return fetchEmailDeferer.promise; };

Page 25: Async all around us (promises)

PROMISES

this.updateEmailsInDatabase = function() { var fetchEmailDeferer = Q.defer();

inboxHandler .listMessages() .then( saveMessagesFromEmailServerLocally ) .then( fetchEmailDeferer.resolve ) .done();

return fetchEmailDeferer.promise; };

Page 26: Async all around us (promises)

WHAT IS A PROMISE?- Like a future

- I promise that I will resolve a value

Page 27: Async all around us (promises)

WHAT IS A PROMISE?- Like a future

- I promise that I will resolve a value- function fooBar() {

- …;- return promise;

- }

Page 28: Async all around us (promises)

WHAT IS A PROMISE?- Like a future

- I promise that I will resolve a value- function fooBar() {

- var deferer = Q.defer()- functionWithACallback( function( aValue) {

- deferer.resolve( aValue );- }- return defer.promise;

- }

- var promise = fooBar();

Page 29: Async all around us (promises)

WHAT IS A PROMISE?- Like a future

- I promise that I will resolve a value- function fooBar() {

- var deferer = Q.defer()- functionWithACallback( function( aValue) {

- deferer.resolve( aValue );- }- return defer.promise;

- }

- var promise = fooBar();

Page 30: Async all around us (promises)

WHAT IS A PROMISE?- Like a future

- I promise that I will resolve a value- function fooBar() {

- var deferer = Q.defer()- functionWithACallback( function( aValue) {

- deferer.resolve( aValue );- }- return defer.promise;

- }

- var promise = fooBar();- promise.then( function( value ) {

- console.log( “myValue:”, value );- });

Page 31: Async all around us (promises)

ARGUMENTS

Page 32: Async all around us (promises)

ARGUMENT FLOW

inboxHandler .listMessages() .then( saveMessagesFromEmailServerLocally ) .then( fetchEmailDeferer.resolve ) .done();

Page 33: Async all around us (promises)

ARGUMENT FLOW

inboxHandler .listMessages() .then( saveMessagesFromEmailServerLocally ) .then( fetchEmailDeferer.resolve ) .done();

Page 34: Async all around us (promises)

BI-DIRECTIONAL ARGUMENTS

Page 35: Async all around us (promises)

BI-DIRECTIONAL ARGUMENTS

databasePromise

.then( openCollection( dbconfig.getUsersCollectionName() ) )

.then( insert(user) )

.then( addUserDeferer.resolve )

.done();

Page 36: Async all around us (promises)

BI-DIRECTIONALARGUMENTS

databasePromise

.then( openCollection( dbconfig.getUsersCollectionName() ) )

.then( insert(user) )

.then( addUserDeferer.resolve )

.done();

Page 37: Async all around us (promises)

BI-DIRECTIONAL ARGUMENTS

//.then( openCollection( dbconfig.getUsersCollectionName() ) )

function openCollection( colectionToOpen ) {

return function(db) {

return db.collection( colectionToOpen );

};

}

Page 38: Async all around us (promises)

BI-DIRECTIONAL ARGUMENTS

//.then( openCollection( dbconfig.getUsersCollectionName() ) )

function openCollection( colectionToOpen ) {

return function(db) {

return db.collection( colectionToOpen );

};

}

Page 39: Async all around us (promises)

BI-DIRECTIONAL ARGUMENTS

//.then( openCollection( dbconfig.getUsersCollectionName() ) )

function openCollection( colectionToOpen ) {

return function(db) {

return db.collection( colectionToOpen );

};

}

Page 40: Async all around us (promises)
Page 41: Async all around us (promises)

TEST YOUR STUFF!

Page 42: Async all around us (promises)

PLEASETEST YOUR STUFF!

Page 43: Async all around us (promises)

UNIT TESTS IMPACT IN JS

inboxHandler .listMessages() .then( saveMessagesFromEmailServerLocally )

it('should be able to list messages', function( done ) { inboxHandler.listMessages( 2 ).then( function( messages ) { messages.should.have.length( 2 ); }).done( done ); });

Page 44: Async all around us (promises)

READABLE & MAINTAINABLE

inboxHandler .listMessages() .then( saveMessagesFromEmailServerLocally ) .then( fetchEmailDeferer.resolve ) .done();

Page 45: Async all around us (promises)

QUESTIONS

?http://j.rfer.us/EBRJimk0X