Човек трябва да избягва пирамидата на гибелта:
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');
Тази проба показва резултат, който зависи от 2 независими изчислени стойности. Всяка от тези стойности е заявена в doQuery1 и doQuery2. Те се изпълняват последователно, но асинхронно.
След това можете да видите Q.all(...
които основно наричат обратното извикване "тогава" при успех. В рамките на това обратно извикване се извършва изчислението.
Използване на обещания (подробности :Github Q:обещание за Javascript и wikipedia ) позволяват да направите кода си по-чист, да отделите изчисленията и обработката на резултатите и да преместите нещата наоколо.
Вижте колко лесно би било да добавите "doQuery3" като предпоставка за вашето изчисление!
И по-долу „package.json“, принадлежащ към примерния код:
{
"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"
}
}