[英]Updating outside variables inside a javascript function in Node.js
我正在开发NodeJS应用程序,遇到以下问题:
我正在使用节点模块node-rest-client
使用API发出REST请求。 我使用模块提供的post
方法。 我需要获取json响应并将其写入以分隔变量并返回它们。
我在client.post
方法之外定义了returnData
变量。 我需要在函数内部更新此returnData
变量,该变量作为参数传递给client.post
方法。
但是我这里有一个范围问题。 尽管我尝试更新该函数中的returnData
变量,但是当执行从client.post
函数返回时,我看到在调用client.post
函数之前我设置的相同值(在这种情况下为null,但可能是任何值)仍然存在在变量中。
我怎样才能很好地定义作用域,以便可以更新作为参数传递给另一个函数的函数内部的外部变量? 任何帮助将不胜感激。
以下是我的代码:
module.exports = function(){
require("../config");
var restClient = require('node-rest-client').Client;
var client = new restClient();
var sessionID = null,
reqID = 1;
var login = function(username, password){
var requestParams = {};
var apiParams = {};
requestParams.jsonrpc = "2.0";
requestParams.method = ZABBIX_API_METHODS.login;
apiParams.user = username;
apiParams.password = password;
requestParams.params = apiParams;
requestParams.id = reqID;
requestParams.auth = null;
var args = {
data: requestParams,
headers:{"Content-Type": "application/json-rpc"} // ask response type to be application/json-rpc
};
var returnData = {};
returnData.status = null;
returnData.data = null
client.post(ZABBIX_API, args, function(resData,rawRes){
if(rawRes.statusCode == 200){
returnData.status = rawRes.statusCode;
returnData.data = resData;
}
else{
returnData.status = rawRes.statusCode;
returnData.data = "Request Failed!";
}
reqID = reqID + 1;
console.log(returnData.data);
});
console.log("SessionID:"+getSessionID());
return returnData;
}
var functions = {
login: login
}
return functions;
}
谢谢。
.post
是异步的,您应该这样做,
var login = function(username, password, callback){
..................
client.post(ZABBIX_API, args, function(resData,rawRes){
if(rawRes.statusCode == 200){
returnData.status = rawRes.statusCode;
returnData.data = resData;
}
else{
returnData.status = rawRes.statusCode;
returnData.data = "Request Failed!";
}
reqID = reqID + 1;
return {login: returnData};
});
//remove all below return statements
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.