2013-09-23 51 views
0

我使用的快遞和貓鼬列出貓在我的主頁搜索在一個頁面中不同的型號,貓鼬

app.get('/', function(req, res) { 
    Model.cats.find(function(err, ret) { 
     res.render('home.jade', {cats: ret}); 
    }) 
}); 

現在可以說,我想顯示貓,狗爲好。我怎麼能這樣做? find函數畢竟是異步的,所以我不知道如何準備響應。

+1

不知道貓鼬的事情,但不要讓異步性阻止你,看看https://github.com/caolan/async模塊,它肯定會緩解你的生活遲早。最可能更快。 –

回答

1

如果包括asyncnpm module,這是相當簡單:

app.get('/', function(req, res) { 
    async.parallel({ 
     cats: function(callback) { 
      Model.cats.find(function(err, ret) { 
       callback(null, ret); 
      }); 
     }, 
     dogs: function(callback) { 
      Model.dogs.find(function(err, ret) { 
       callback(null, ret); 
      }); 
     } 
    }, 
    function(err, results) { 
     // results will be { cats: results, dogs: results} 
     res.render('home.jade', results); 
    }); 
}); 

上述技術開始兩個命名異步請求,一個cat和其他dog。每個函數都會調用您的Model。完成後,他們會呼叫callback傳遞任何錯誤(我剛剛將其放在上面的null)和查找結果中。當以這種方式使用命名調用時非常方便,因爲結果將放置在單個對象的兩個屬性中,您可以直接將其傳遞給render方法。