Javascript 承诺不起作用后返回
我有一个这样的函数,它应该在查询完成后返回一个模式。我不明白为什么这个函数总是返回未定义的值。 var loadSchema=functionclassName{ var query=schemaModel.findOne{className:className} var promise=query.exec promise.thenfunctionschema{ console.logschema 返回模式 }.thennull,console.logJavascript 承诺不起作用后返回,javascript,node.js,promise,Javascript,Node.js,Promise,我有一个这样的函数,它应该在查询完成后返回一个模式。我不明白为什么这个函数总是返回未定义的值。 var loadSchema=functionclassName{ var query=schemaModel.findOne{className:className} var promise=query.exec promise.thenfunctionschema{ console.logschema 返回模式 }.thennull,console.log } 您的return语句正在从作为.th
} 您的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
});
您还可以让函数返回承诺,然后在loadSchema调用后返回chain.thens。我不确定你的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(...)...
请参见此处,以获取上述语句的示例,其中包含手动生成的承诺:第一个示例返回undefined,因为您没有返回任何内容。你的第二个例子是正确的,但是我不知道我仍然不能得到这个值意味着什么。您试图使用值的代码在哪里?谢谢您的回答。使用你的第二种方法,如果我有一个像我在编辑中展示的函数链,我应该从一个函数返回承诺给其他函数吗?我不熟悉promises,再次感谢。您可以在module.exports中应用相同的内容,或者返回loadSchema…,然后消费者需要执行module.getSchema…,然后。。。由于您不依赖module.exports函数中的另一个承诺,也可以使用相同的回调方法。我编辑了我的答案,以反映这些方法。有关一般承诺的更多信息,请参见此处: