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
});
};