我有一个这样的函数,它应该在查询完成后返回一个模式。我不明白为什么这个函数总是返回未定义的值。
var loadSchema = function(className) {
var query = schemaModel.findOne({className: className})
var promise = query.exec()
promise.then(function(schema){
console.log(schema)
return schema
}).then(null, console.log)
}
我也试图从功能中返回一个完整的承诺,但我仍然无法获得价值。喜欢这个
var loadSchema = function(className) {
var query = schemaModel.findOne({className: className})
var promise = query.exec()
return promise.then(function(schema){
console.log(schema)
return schema
}).then(null, console.log)
}
任何人都可以告诉我这个程序的流程。我在stackoverflow中看过其他类似的问题,但我无法理解这一点。
编辑: 这是我使用此值的代码。
module.exports.getSchema = function(req) {
var className = req.params.classname
var schema = loadSchema(className)
console.log(schema)
return schema
}
答案 0 :(得分:1)
您的return语句将返回您作为.then
参数提供的函数。
解决这个问题的一种方法是为你的loadSchema函数提供一个回调函数,该函数在then函数体内执行,如下所示:
var loadSchema = function(className, callback) {
var query = schemaModel.findOne({className: className});
var promise = query.exec();
promise.then(function(schema) {
console.log(schema);
callback(schema);
}).then(null, console.log);
}
module.exports.getSchema = function(req, callback) {
var className = req.params.classname
loadSchema(className, callback)
}
theModule.getSchema("req", function(schema) {
//do stuff
});
您还可以让您的函数返回承诺,然后在.then
电话后链接loadSchema
。我不确定你的schemaModel变量是什么,但它将是......
var loadSchema = function(className, callback) {
var query = schemaModel.findOne({className: className});
var promise = query.exec();
return promise;
}
module.exports.getSchema = function(req, callback) {
var className = req.params.classname
return loadSchema(className, callback)
}
theModule.getSchema("aClassName").then(...)...
请参阅此处以获取上述语句的示例,其中包含手动生成的承诺:http://plnkr.co/edit/dVRs5cmErPp0JCd5CQPU