簡體   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