Google App Script中的全局变量问题

时间:2018-04-19 11:32:36

标签: javascript variables scope

我试图接收一些发送到webhook的数据并使用它。我能够接收数据并将其转换为json String但是我想将json String分配给全局变量,以便我可以在其他地方和其他函数中使用它。

我首先声明变量,然后在收到变量时尝试将json字符串分配给它,但它似乎没有工作 - 变量仍未定义'

var jsonData;

function doPost(e){
    try{
        var jsonString = e.postData.getDataAsString();
        setLog("***json String = " + jsonString + " ***");
        jsonData = JSON.parse(jsonString);
    }
    catch(e){           
        setLog("***Exception occured = "+JSON.stringify(e) + " ***");  
    }
}

我对Javascript很陌生,我不确定我在哪里出错。

在寻找其他地方的时候,我发现只要脚本像Google Apps脚本一样运行,全局变量就会被更改,但我不希望这些变量在每次运行后都保持不变脚本运行。我只需要在其他函数中使用全局变量。

1 个答案:

答案 0 :(得分:0)

您想在其他功能中使用jsonData。我认为你的情况有3种模式。

模式1

这是一个简单的解决方案。您在jsonData中重新声明doPost(e)。这样,undefined就出现了。所以修改如下。在这种情况下,运行脚本完成后会清除jsonData

来自:
var jsonString = e.postData.getDataAsString();
至 :
jsonString = e.postData.getDataAsString(); // Remove "var"

模式2

这是一个解决方案,即使正在运行的脚本完成并再次运行,也可以使用jsonData。但是有一个时间限制。在这种情况下,它使用Cache Service。使用缓存服务时,该值必须是字符串数据。

function doPost(e){
    try{
        var jsonString = e.postData.getDataAsString();
        setLog("***json String = " + jsonString + " ***");
//        jsonData = JSON.parse(jsonString);
        var cache = CacheService.getScriptCache();
        cache.put('jsonString', jsonString, 1500); // cache for 25 minutes
    }
    catch(e){           
        setLog("***Exception occured = "+JSON.stringify(e) + " ***");  
    }
}

// When you use jsonData, please JSON.parse() like this function.
function myFunction() {
  var cache = CacheService.getScriptCache();
  var jsonString = cache.get('jsonString');
  var jsonData = JSON.parse(jsonString);

  // do something
}

模式3

这是一个解决方案,即使正在运行的脚本完成并再次运行,也可以使用jsonData。在这种情况下,它使用Properties Service。使用“属性服务”时,该值必须是字符串数据,并且没有时间限制。

function doPost(e){
    try{
        var jsonString = e.postData.getDataAsString();
        setLog("***json String = " + jsonString + " ***");
//        jsonData = JSON.parse(jsonString);
        var scriptProperties = PropertiesService.getScriptProperties();
        scriptProperties.setProperty('jsonString', jsonString); // Save jsonString to the property.
    }
    catch(e){           
        setLog("***Exception occured = "+JSON.stringify(e) + " ***");  
    }
}

// When you use jsonData, please JSON.parse() like this function.
function myFunction() {
  var scriptProperties = PropertiesService.getScriptProperties();
  var jsonString = scriptProperties.getProperty('jsonString');
  var jsonData = JSON.parse(jsonString);

  // do something
}

如果我误解了你的情况,我很抱歉。