44
#dotbari

Gestire l'asincronia in javascript uno sguardo al futuro!

Embed Size (px)

DESCRIPTION

Uno sguardo alle tecnologie usate fino ad oggi per gestire l'asincronia in javascript e quali saranno le tecnologie in futuro.

Citation preview

Page 1: Gestire l'asincronia in javascript  uno sguardo al futuro!

#dotbari

Page 2: Gestire l'asincronia in javascript  uno sguardo al futuro!

Giuseppe Santoro

ApuliaSoft

Page 3: Gestire l'asincronia in javascript  uno sguardo al futuro!

Gestire l'asincronia in

JavaScript

uno sguardo al futuro!

Page 4: Gestire l'asincronia in javascript  uno sguardo al futuro!

C’era una volta

Page 5: Gestire l'asincronia in javascript  uno sguardo al futuro!

$conn = $db.connect(‘localhost:1234’);

$user = $conn.query(‘SELECT . . .’);

$user.name = ‘Pippo’;

$user.save();

echo(‘salvato’);

Page 6: Gestire l'asincronia in javascript  uno sguardo al futuro!

Apache Server

t1

Richiesta Creazione di 1 thread

Page 7: Gestire l'asincronia in javascript  uno sguardo al futuro!

Apache Server

t1

t2

2 richieste Creazione di 2 threads

Page 8: Gestire l'asincronia in javascript  uno sguardo al futuro!

Apache Server

t1

t3

4 richieste Creazione di 4 threads

t2

t4

Page 9: Gestire l'asincronia in javascript  uno sguardo al futuro!

$conn = $db.connect(‘localhost:1234’);

$user = $conn.query(‘SELECT . . .’);

$user.name = ‘Pippo’;

$user.save();

echo(‘salvato’);

Page 10: Gestire l'asincronia in javascript  uno sguardo al futuro!

$conn = $db.connect(‘localhost:1234’);

$user = $conn.query(‘SELECT . . .’);

$user.name = ‘Pippo’;

$user.save();

echo(‘salvato’);

Page 11: Gestire l'asincronia in javascript  uno sguardo al futuro!

var conn = db.connect(‘localhost:1234’);

var user = conn.query(‘SELECT . . .’);

user.name = ‘Pippo’;

user.save();

console.log(‘salvato’);

Page 12: Gestire l'asincronia in javascript  uno sguardo al futuro!

var conn = db.connect(‘localhost:1234’);

var user = conn.query(‘SELECT . . .’);

user.name = ‘Pippo’;

user.save();

console.log(‘salvato’);

Page 13: Gestire l'asincronia in javascript  uno sguardo al futuro!

var conn = db.connect(‘localhost:1234’);

var user = conn.query(‘SELECT . . .’);

user.name = ‘Pippo’;

user.save();

console.log(‘salvato’);

Page 14: Gestire l'asincronia in javascript  uno sguardo al futuro!

var conn = db.connect(‘localhost:1234’);

var user = conn.query(‘SELECT . . .’);

user.name = ‘Pippo’;

user.save();

console.log(‘salvato’);

Page 15: Gestire l'asincronia in javascript  uno sguardo al futuro!

var conn = db.connect(‘localhost:1234’);

var user = conn.query(‘SELECT . . .’);

user.name = ‘Pippo’;

user.save();

console.log(‘salvato’);

Page 16: Gestire l'asincronia in javascript  uno sguardo al futuro!

t1

1 richiesta 1 thread

Page 17: Gestire l'asincronia in javascript  uno sguardo al futuro!

t1

2 richieste 1 thread

Page 18: Gestire l'asincronia in javascript  uno sguardo al futuro!

t1

4 richieste 1 thread

Page 19: Gestire l'asincronia in javascript  uno sguardo al futuro!

t1

4 richieste 1 thread

Page 20: Gestire l'asincronia in javascript  uno sguardo al futuro!

Node.js

Page 21: Gestire l'asincronia in javascript  uno sguardo al futuro!

var conn = db.connect(‘localhost:1234’);

var user = conn.query(‘SELECT . . .’);

user.name = ‘Pippo’;

user.save();

console.log(‘salvato’);

Page 22: Gestire l'asincronia in javascript  uno sguardo al futuro!

‘il passato’: CALLBACK

Page 23: Gestire l'asincronia in javascript  uno sguardo al futuro!

var conn = db.connect(‘localhost:1234’);

Page 24: Gestire l'asincronia in javascript  uno sguardo al futuro!

var conn = db.connect(‘localhost:1234’);

db.connect(‘localhost:1234’, function(err,conn){

// async code

});

// code code code code

Page 25: Gestire l'asincronia in javascript  uno sguardo al futuro!

db.connect(‘localhost:1234’, function(err,conn){

conn.query(‘SELECT...’, function(err,user){

user.name = ‘Pippo’;

user.save(function(err){

console.log(‘salvato’);

});

});

});

Page 26: Gestire l'asincronia in javascript  uno sguardo al futuro!

db.connect(‘localhost:1234’, function(err,conn){

if (err) return console.log(‘errore’);

conn.query(‘SELECT...’, function(err,user){

if (err) return console.log(‘errore’);

user.name = ‘Pippo’;

user.save(function(err){

if (err) return console.log(‘errore’);

console.log(‘salvato’);

});

});

});

Page 27: Gestire l'asincronia in javascript  uno sguardo al futuro!

‘il presente’: PROMISE

Page 28: Gestire l'asincronia in javascript  uno sguardo al futuro!

var conn = db.connect(‘localhost:1234’);

Page 29: Gestire l'asincronia in javascript  uno sguardo al futuro!

var conn = db.connect(‘localhost:1234’);

var promisedConn = db.connect(‘localhost:1234’);

// code code code code

promisedConn.then(function(conn){

// async code

});

// code code code code

Page 30: Gestire l'asincronia in javascript  uno sguardo al futuro!

var conn = db.connect(‘localhost:1234’);

var promisedConn = db.connect(‘localhost:1234’);

// code code code code

promisedConn.then(function(conn){

// async code

}).then(function(val){});

// code code code code

Page 31: Gestire l'asincronia in javascript  uno sguardo al futuro!

IDEA: chaining

Page 32: Gestire l'asincronia in javascript  uno sguardo al futuro!

db.connect(‘localhost:1234’)

.then(function(conn){

return conn.query(‘SELECT...’);

}).then(function(user){

user.name = ‘Pippo’;

return user.save();

}).then(function(){

console.log(‘salvato’);

});

Page 33: Gestire l'asincronia in javascript  uno sguardo al futuro!

db.connect(‘localhost:1234’)

.then(function(conn){

return conn.query(‘SELECT...’);

}).then(function(user){

user.name = ‘Pippo’;

return user.save();

}).then(function(){

console.log(‘salvato’);

}).fail(function(){

console.log(‘errore’);

});

Page 34: Gestire l'asincronia in javascript  uno sguardo al futuro!

‘il futuro’: GENERATOR

Page 35: Gestire l'asincronia in javascript  uno sguardo al futuro!

yield

Page 36: Gestire l'asincronia in javascript  uno sguardo al futuro!

function count(n){

var res = []

for (var x = 0; x < n; x++) {

res.push(x)

}

return res

}

for (var x of count(5)) {

console.log(x)

}

Page 37: Gestire l'asincronia in javascript  uno sguardo al futuro!

function* count(n){

for (var x = 0; x < n; x++) {

yield x

}

}

for (var x of count(5)) {

console.log(x)

}

Page 38: Gestire l'asincronia in javascript  uno sguardo al futuro!

co(function *(){

var a = yield get('http://google.com');

var b = yield get('http://yahoo.com');

})()

co(function *(){

var c = yield get('http://apple.com');

var d = yield get('http://microsoft.com');

})()

Page 39: Gestire l'asincronia in javascript  uno sguardo al futuro!

var conn = db.connect(‘localhost:1234’);

var user = conn.query(‘SELECT . . .’);

user.name = ‘Pippo’;

user.save();

console.log(‘salvato’);

Page 40: Gestire l'asincronia in javascript  uno sguardo al futuro!

co(function *(){

var conn = yield db.connect(‘localhost:1234’);

var user = yield conn.query(‘SELECT . . .’);

user.name = ‘Pippo’;

yield user.save();

console.log(‘salvato’);

})();

Page 41: Gestire l'asincronia in javascript  uno sguardo al futuro!

Compatibilita’

0.11.131

$ node -harmony [filename]

Page 42: Gestire l'asincronia in javascript  uno sguardo al futuro!

Compatibilita’

Page 43: Gestire l'asincronia in javascript  uno sguardo al futuro!

Compatibilita’

Page 44: Gestire l'asincronia in javascript  uno sguardo al futuro!

Grazie per l’ascolto

Domande ? ?