繁体   English   中英

在Node.js中的javascript函数内更新外部变量

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM