Saya menggunakan janji Bluebird di sini. Perhatikan bagaimana maksud dari kode ini agak jelas dan tidak ada nesting.
Pertama, mari kita janjikan panggilan hgetall dan klien -
var client = Promise.promisifyAll(client);
Sekarang, mari kita menulis kode dengan janji, .then
alih-alih panggilan balik simpul dan agregasi dengan .map
. Apa .then
tidak adalah sinyal operasi async selesai. .map
mengambil berbagai hal dan memetakan semuanya ke operasi asinkron seperti panggilan hgetall Anda.
Perhatikan bagaimana Bluebird menambahkan (secara default) sebuah Async
akhiran untuk metode yang dijanjikan.
exports.awesomeThings = function(req, res) {
// make initial request, map the array - each element to a result
return client.lrangeAsync("awesomeThings", 0, -1).map(function(awesomeThing) {
return client.hgetallAsync("awesomething:" + awesomeThing);
}).then(function(things){ // all results ready
console.log(things); // log them
res.send(JSON.stringify(things)); // send them
return things; // so you can use from outside
});
};