Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺不起作用后返回_Javascript_Node.js_Promise - Fatal编程技术网

Javascript 承诺不起作用后返回

Javascript 承诺不起作用后返回,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

我有一个这样的函数,它应该在查询完成后返回一个模式。我不明白为什么这个函数总是返回未定义的值。 var loadSchema=functionclassName{ var query=schemaModel.findOne{className:className} var promise=query.exec promise.thenfunctionschema{ console.logschema 返回模式 }.thennull,console.log
} 您的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函数中的另一个承诺,也可以使用相同的回调方法。我编辑了我的答案,以反映这些方法。有关一般承诺的更多信息,请参见此处: