Upload
apuliasoft
View
109
Download
0
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
#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
t3
4 richieste Creazione di 4 threads
t2
t4
$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 ? ?