【发布时间】:2017-03-30 03:53:43
【问题描述】:
我正在编写一个带有 ES6 承诺的异步函数,即 1) 为用户保存查询参数 2) 使用 mongoose 从 mongodb 获取数据,3) 将 json 操作为 DSL,4) 并使用它。
mongoose": "^4.7.7"
//myController.js
const myQuery = require('../models/myQuery_model');
require('mongoose').Promise = global.Promise
const uuidV4 = require('uuid/v4');
exports.saveNewQuery = function(req, res, next) {
const rawQuery = req.body;
const queryToStore = new myQuery(rawQuery);
const uid = uuidV4();
const queryToStore.uid = uid
queryToStore.save().then(() => {
fetchQueryFromMongo(uid);
}).then((storedQuery) => {
compileQueryToString(storedQuery);
}).then((queryString) => {
fetchResultsFromOtherDb(queryString);
}).then((results) => {
res.json({ results });
}).catch((error) => {
console.log(error)
})
}
目前我无法解决来自 mongodb 步骤 2 的响应。不过,控制器继续到 compileQueryToString,而不是从 fetchQueryFromMongo 捕获错误
// fetchQueryFromMongo.js
const myQuery = require('../models/myQuery');
require('mongoose').Promise = global.Promise
module.exports = (uid) => {
return new Promise(
(resolve, reject) => {
myQuery.find({ uid }).then((err, res) => {
if (err) {
reject(err);
}
console.log('response success!')
resolve(res);
});
}
);
};
我是新的承诺,所以任何提示/建议将不胜感激!
【问题讨论】:
-
你需要
return来自你的then处理程序的东西。
标签: mongodb express mongoose ecmascript-6 es6-promise