Seseorang harus menghindari piramida malapetaka:
var express = require('express');
var Q = require('Q');
var app = express();
app.get('/',function(req,res){
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : ''
});
connection.connect();
function doQuery1(){
var defered = Q.defer();
connection.query('SELECT 1 AS solution',defered.makeNodeResolver());
return defered.promise;
}
function doQuery2(){
var defered = Q.defer();
connection.query('SELECT 2 AS solution',defered.makeNodeResolver());
return defered.promise;
}
Q.all([doQuery1(),doQuery2()]).then(function(results){
res.send(JSON.stringify(results[0][0][0].solution+results[1][0][0].solution));
// Hint : your third query would go here
});
connection.end();
});
app.listen(80);
console.log('Listening on port 80');
Contoh ini menunjukkan hasil yang bergantung pada 2 nilai yang dihitung secara independen. Masing-masing nilai ini dikueri di doQuery1 dan doQuery2. Mereka dieksekusi secara berurutan, tetapi tidak sinkron.
Selanjutnya Anda dapat melihat Q.all(...
yang pada dasarnya menyebut panggilan balik "lalu" untuk sukses. Dalam panggilan balik itu, perhitungan selesai.
Menggunakan janji (detail :Github Q:janji untuk Javascript dan wikipedia ) memungkinkan untuk membuat kode Anda lebih bersih, memisahkan perhitungan dan penanganan hasil, serta memindahkan berbagai hal.
Lihatlah betapa mudahnya menambahkan "doQuery3" sebagai prasyarat untuk perhitungan Anda!
Dan di bawah "package.json" yang termasuk kode sampel:
{
"name": "hello-world",
"description": "hello world test app",
"version": "0.0.1",
"private": true,
"dependencies": {
"express": "3.2.0",
"q": "0.9.3",
"mysql":"2.0.0-alpha7"
}
}