Người ta nên tránh kim tự tháp của sự diệt vong:
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');
Mẫu này hiển thị kết quả phụ thuộc vào 2 giá trị được tính toán độc lập. Mỗi giá trị trong số này được truy vấn trong doQuery1 và doQuery2. Chúng được thực thi theo trình tự, nhưng không đồng bộ.
Tiếp theo, bạn có thể thấy Q.all(...
về cơ bản gọi lại "sau đó" khi thành công. Trong lần gọi lại đó, tính toán đã được thực hiện.
Sử dụng lời hứa (chi tiết: Github. Hỏi:lời hứa dành cho Javascript và wikipedia ) cho phép làm cho mã của bạn sạch hơn, tính toán riêng biệt và xử lý các kết quả cũng như di chuyển mọi thứ một cách xoay vòng.
Hãy xem việc thêm "doQuery3" làm điều kiện tiên quyết cho phép tính của bạn sẽ dễ dàng như thế nào!
Và bên dưới "package.json" kéo dài đến mã mẫu:
{
"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"
}
}