2015-09-07 53 views
0

我使用的是藍鳥promisifyall貓鼬如下:使用藍鳥Promisifyall與貓鼬

var mongoose = require('bluebird').promisifyAll(require('mongoose')) 

我想檢索使用蒙戈一個文檔,其中如下:

// Gets a list of Posts 
exports.index = function(req, res) { 
    console.log(req.query); 
    Post.findAsync() 
    .whereAsync({author: req.query.id}) 
    .execAsync() 
    .then(function(entity) { 
      if (entity) { 
       res.status(statusCode).json({ 
       status_code: statusCode, 
       data: entity 
       }); 
      } 
    }) 
    .catch(function(err) { 
     res.status(200).json({ 
     status_code: statusCode, 
     message: 'error occured', 
     errors: err 
     }); 
    }); 
}; 

但只是掛起,我是我做錯了什麼? 將不勝感激任何幫助使用promysifyall從藍鳥與貓鼬,謝謝:)

+0

貓鼬已經本能地回報承諾,而不需要拉攏藍鳥承諾。如前所述,獲得「promisified」的唯一方法是像'.findOne()'到'.findOneAsync()'的異步方法,而不是不像'.where()'這樣的異步方法。總之,你不需要藍鳥的承諾,除非你特別想要「添加」,如'.spread()' –

回答

1

findwhere是不是異步的,他們不採取回調。所以不要使用它們的…Async變體 - 你不希望它們返回一個承諾,你想要一個貓鼬查詢對象。

嘗試

Post.find().where({author: req.query.id}).execAsync() 
.then(…) 
.… 

順便說一句,你的請求不掛起,如果entity是falsy,你從來不寫在這種情況下的響應。考慮添加一個elsethrow new Error("no entity")

+0

謝謝,這解決了它。我有函數來處理未找到的實體和其他類,只是沒有包含在這裏 –