无法从节点js模块返回值

exports.getDefiniton = function (text) { var definition = ""; wn.definitions(text, { useCanonical: true , includeRelated: true , limit: 3 }, function (e, defs) { definition = defs[0].word + ': 1.' + defs[0].text; definition += '\n2.' + defs[1].text; definition += '\n3.' + defs[2].text; console.log(definition) }); return definition; }; 

Console.log里面的函数(e,defs)起作用。

但是return语句似乎没有返回值。

如何正确返回“定义”variables?

因为wn.definition是一个asynchronous调用你应该使用承诺或asynchronous/等待或callbackfunction。

使用callback你的代码就像这样(例如,可以说你把它存储在一个def.js文件中):

 exports.getDefiniton = function (text, callback) { var definition = ""; wn.definitions(text, { useCanonical: true , includeRelated: true , limit: 3 }, function (e, defs) { definition = defs[0].word + ': 1.' + defs[0].text; definition += '\n2.' + defs[1].text; definition += '\n3.' + defs[2].text; console.log(definition); callback(definition); }); }; 

你可以像这样使用def.js模块:

 var defModule = require("./def"); defModule.getDefiniton("Hello", function (defintion) { console.log(defintion); }); 

更新: @Xuva在这种情况下检查下面的代码:

 var defModule = require("./def"); defModule.getDefiniton("Hello", function (definition) { displayMessage(text, definition); //rest of the code ... });