Node.js 使用节点模块的返回值作为变量?
我目前正在尝试编写一个简单的小节点模块,以使访问API更容易。我遇到的问题是我想打电话给你Node.js 使用节点模块的返回值作为变量?,node.js,Node.js,我目前正在尝试编写一个简单的小节点模块,以使访问API更容易。我遇到的问题是我想打电话给你 var randomVar = myModule.function() 并将该函数的输出分配给变量。我认为这和返回有问题的值一样简单,但randomVar仍然没有定义,我显然遗漏了一些东西 这是我的HTTP请求,看起来相当标准: exports.function = function(){ var options = { // stuff }; fetchRe
var randomVar = myModule.function()
并将该函数的输出分配给变量。我认为这和返回有问题的值一样简单,但randomVar仍然没有定义,我显然遗漏了一些东西
这是我的HTTP请求,看起来相当标准:
exports.function = function(){
var options = {
// stuff
};
fetchResult = function(options,callback){
var http = require('http');
var str = '';
http.get(options,function(res){
res.on('data',function(chunk){
str += chunk;
});
res.on('end',function(){
callback(JSON.parse(str));
});
}).on('error', function(e){
callback(e.message);
});
}
fetchResult(options,function(data){
console.log(data);
// what do I do here?
});
}
底部的console.log输出了我想要的数据,但是为了能够将其分配给模块外的变量,我应该如何处理这些数据呢
非常感谢您。您尝试从中返回的函数是一个异步函数,因此您必须等待操作完成后才能使用该变量。这就是回调的用武之地 在
exports.function
中添加一个名为callback
exports.function = function (callback) {
回调
是将使用您的数据的函数!因此,从fetchResult
run:
callback(data);
现在您将调用并使用此函数:
myModule.function(function(data) {
//console.log(data); //the data you want!
});
对不起,我对回调还是比较陌生的。我认为fetchResult()中的回调函数已经在等待操作完成,以查看如何在res.on('end')中调用回调。因此,我在fetchResult()中所做的一切不都应该在http请求成功完成后发生吗?
fetchResult
是调用,该调用中的函数是检索数据后发生的函数。模块中的变量不知道这一点,因此它尝试立即赋值,但失败。回调只是另一个函数调用,允许使用处理后的数据。啊,好的,这是有意义的。我想得不够远,看不到还有别的事情发生。然而,我不确定我是否完全忘记了一些明显的事情,或者是否已经太晚了,但即使我现在传递回调函数,它的作用与以前完全相同。这样做是将“数据”完全分配给结果变量的唯一方法吗<代码>风险值结果=“”;myModule(其他参数,函数(数据){results=data;})不能从从异步操作获取数据的函数中返回数据(http.get()
)。当函数返回时,数据还没有准备好。请参阅tymeJV的回调建议(下面的答案),作为解决此问题的常用方法。