我正在尝试将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;
答案 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);
});