#dotbari
Giuseppe Santoro 
ApuliaSoft
Gestire l'asincronia in 
JavaScript 
uno sguardo al futuro!
C’era una volta
$conn = $db.connect(‘localhost:1234’); 
$user = $conn.query(‘SELECT . . .’); 
$user.name = ‘Pippo’; 
$user.save(); 
echo(‘salvato’);
Apache Server 
t1 
Richiesta Creazione di 1 thread
Apache Server 
t1 
t2 
2 richieste Creazione di 2 threads
Apache Server 
t1 
t2 
t3 
t4 
4 richieste Creazione di 4 threads
$conn = $db.connect(‘localhost:1234’); 
$user = $conn.query(‘SELECT . . .’); 
$user.name = ‘Pippo’; 
$user.save(); 
echo(‘salvato’);
$conn = $db.connect(‘localhost:1234’); 
$user = $conn.query(‘SELECT . . .’); 
$user.name = ‘Pippo’; 
$user.save(); 
echo(‘salvato’);
var conn = db.connect(‘localhost:1234’); 
var user = conn.query(‘SELECT . . .’); 
user.name = ‘Pippo’; 
user.save(); 
console.log(‘salvato’);
var conn = db.connect(‘localhost:1234’); 
var user = conn.query(‘SELECT . . .’); 
user.name = ‘Pippo’; 
user.save(); 
console.log(‘salvato’);
var conn = db.connect(‘localhost:1234’); 
var user = conn.query(‘SELECT . . .’); 
user.name = ‘Pippo’; 
user.save(); 
console.log(‘salvato’);
var conn = db.connect(‘localhost:1234’); 
var user = conn.query(‘SELECT . . .’); 
user.name = ‘Pippo’; 
user.save(); 
console.log(‘salvato’);
var conn = db.connect(‘localhost:1234’); 
var user = conn.query(‘SELECT . . .’); 
user.name = ‘Pippo’; 
user.save(); 
console.log(‘salvato’);
t1 
1 richiesta 1 thread
t1 
2 richieste 1 thread
t1 
4 richieste 1 thread
t1 
4 richieste 1 thread
Node.js
var conn = db.connect(‘localhost:1234’); 
var user = conn.query(‘SELECT . . .’); 
user.name = ‘Pippo’; 
user.save(); 
console.log(‘salvato’);
‘il passato’: CALLBACK
var conn = db.connect(‘localhost:1234’);
var conn = db.connect(‘localhost:1234’); 
db.connect(‘localhost:1234’, function(err,conn){ 
// async code 
}); 
// code code code code
db.connect(‘localhost:1234’, function(err,conn){ 
conn.query(‘SELECT...’, function(err,user){ 
user.name = ‘Pippo’; 
user.save(function(err){ 
console.log(‘salvato’); 
}); 
}); 
});
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’); 
}); 
}); 
});
‘il presente’: PROMISE
var conn = db.connect(‘localhost:1234’);
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
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
IDEA: chaining
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’); 
});
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’); 
});
‘il futuro’: GENERATOR
yield
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) 
}
function* count(n){ 
for (var x = 0; x < n; x++) { 
yield x 
} 
} 
for (var x of count(5)) { 
console.log(x) 
}
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'); 
})()
var conn = db.connect(‘localhost:1234’); 
var user = conn.query(‘SELECT . . .’); 
user.name = ‘Pippo’; 
user.save(); 
console.log(‘salvato’);
co(function *(){ 
var conn = yield db.connect(‘localhost:1234’); 
var user = yield conn.query(‘SELECT . . .’); 
user.name = ‘Pippo’; 
yield user.save(); 
console.log(‘salvato’); 
})();
Compatibilita’ 
0.11.131 
$ node -harmony [filename]
Compatibilita’
Compatibilita’
Grazie per l’ascolto 
Domande ? ?

Gestire l'asincronia in javascript uno sguardo al futuro!