Bluebird承诺没有收到任何数据

时间:2016-02-24 13:03:16

标签: javascript node.js express

我正在尝试将promises集成到我正在开发的应用程序的API中。我通过以下路线收到Postman中的“没有收到数据”,而注释掉的块工作得很好。

import User from './models/User';
import express from 'express';
import Promise from 'bluebird';

const router = express.Router();

router.get("/", function(req, res, next){
    Promise.try(function(){
      User.find({}, function(err, users) {
        return Promise.resolve(users);
      });
    }).then(function(result){
      if (result instanceof Function) {
        result(res);
      } else {
        return res.json(result);
      }
    }).catch(function(err){
        next(err);
    });
});

/*
router.get("/", function(req, res, next){
  User.find({}, function(err, users) {
    return res.json(users);
  });
});
*/


module.exports = router;

1 个答案:

答案 0 :(得分:4)

Promise.try正在同步执行您的功能。任何同步异常都将变为对返回的promise的拒绝。请尝试使用new Promise进行操作,如下所示。

var p = new Promise(function (resolve, reject){
     User.find({}, function(err, users) {
        if (err)
            reject(err);
        else 
            resolve(users);
     });
});
p.then(function(result){
     return res.json(result);
}).catch(function(err){
     next(err);
});