[英]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.