SlideShare a Scribd company logo
#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 ? ?

More Related Content

PDF
jQuery PLUGIN
PDF
Working With Ajax Frameworks
TXT
With enter
PDF
Jquery2
PDF
2017 - NoSQL Vorlesung Mosbach
TXT
Lab 10 rus razvan
PDF
PDF
Introduction to Service Worker
jQuery PLUGIN
Working With Ajax Frameworks
With enter
Jquery2
2017 - NoSQL Vorlesung Mosbach
Lab 10 rus razvan
Introduction to Service Worker

What's hot (20)

PDF
Java script.trend(spec)
DOCX
Simular un next del recordset en php de forma rudimentaria
PDF
Silex al límite
PPT
Создание новых объектов
PDF
Javascript and jQuery for Mobile
PDF
Socket.io - Intro
PDF
Underscore.js
PDF
Primeiros passos-com-docker
DOC
Sumahexavector
PDF
Clase 7 el modelo
PDF
Java Script - Object-Oriented Programming
DOC
Sumahex
KEY
Dart != JavaScript
PDF
Primeiros passo com Docker - DevParaná
PDF
Modern Mobile Web Apps
PPTX
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
PPT
Dart und JavaScript
PDF
Java Thread Cronometro
KEY
Pimp your site with jQuery!
PDF
RubyからJavaScriptへ (!tDiary会議 2011)
Java script.trend(spec)
Simular un next del recordset en php de forma rudimentaria
Silex al límite
Создание новых объектов
Javascript and jQuery for Mobile
Socket.io - Intro
Underscore.js
Primeiros passos-com-docker
Sumahexavector
Clase 7 el modelo
Java Script - Object-Oriented Programming
Sumahex
Dart != JavaScript
Primeiros passo com Docker - DevParaná
Modern Mobile Web Apps
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
Dart und JavaScript
Java Thread Cronometro
Pimp your site with jQuery!
RubyからJavaScriptへ (!tDiary会議 2011)
Ad

Viewers also liked (15)

PDF
Geoportale sistema Maggiore-Lugano
PDF
07 postupci povecanja_termickog_stupnja_djelovanja_u_termoelektranama_s_parni...
PDF
Sviluppo web con Yii
PDF
Gems You Shouldn't Leave Development Without
PDF
Deploying Your Webapps (with Capistrano)
PPTX
Periscope a New Technology for Network Marketing Leaders
PDF
Integrated and sustainable water management of Red-Thai Binh rivers system un...
PDF
A FOSS approach to Integrated Water Resource Management
PDF
La Mucca Viola
PDF
Improving hydropower reservoir operation by using snow-related information
PDF
Curses, tradeoffs, and scalable management: advancing evolutionary direct pol...
PPTX
Caroline VLAEMINCK - Comment mesurer les indicateurs de suivi et d’efficacité
PDF
La publicité sur les réseaux sociaux
PPTX
Week2 innoculationprocess
PDF
Suez Environnement - Guide medias sociaux
Geoportale sistema Maggiore-Lugano
07 postupci povecanja_termickog_stupnja_djelovanja_u_termoelektranama_s_parni...
Sviluppo web con Yii
Gems You Shouldn't Leave Development Without
Deploying Your Webapps (with Capistrano)
Periscope a New Technology for Network Marketing Leaders
Integrated and sustainable water management of Red-Thai Binh rivers system un...
A FOSS approach to Integrated Water Resource Management
La Mucca Viola
Improving hydropower reservoir operation by using snow-related information
Curses, tradeoffs, and scalable management: advancing evolutionary direct pol...
Caroline VLAEMINCK - Comment mesurer les indicateurs de suivi et d’efficacité
La publicité sur les réseaux sociaux
Week2 innoculationprocess
Suez Environnement - Guide medias sociaux
Ad

Gestire l'asincronia in javascript uno sguardo al futuro!