从使用google.script.run的嵌套函数获取变量

时间:2018-01-07 00:43:28

标签: javascript nested-function

我确信我已接近解决这个问题了。我已经做了一些研究,并继续寻找示例,说我可以在嵌套函数中使用局部变量,但在另一方面只使用一些东西(从嵌套函数中获取变量)。最重要的是,我正在使用google.script.run.withSuccessHandler()来混淆这个问题(或者至少让我感到困惑)

我需要让xRates回来,所以我可以在函数“updateSidebarValues”中使用它。我尝试使用闭包但TBH,在添加withSuccessHandler元素时我真的不明白。

我写了这个:(错了,但我必须接近?)

function updateSidebarValues(salesTotals) {

       var valueToPass = document.getElementById('reportSelect').value;
  google.script.run.withSuccessHandler(RatesGetter).getXrates(valueToPass);

 function RatesGetter(xRates) {
  alert('YAY!!!! This is the variable we need from Code.gs : ' + xRates);
 }

   ..... Do other stuff with xRates

}

我的警报工作......它显示了我的代码文件中的正确结果...但是当我稍后尝试使用xRates时,告诉我它未定义:(

2 个答案:

答案 0 :(得分:1)

你实际上不仅仅是一个范围问题。 google.script.run.withSuccessHandler()似乎是异步的,因此它在同一个事件循环中获胜的结果。因此,即使您可以解决范围问题,也可以在定义之前尝试访问这些值。您可以创建另一个函数并在回调中调用它。例如:

function updateSidebarValues(salesTotals) {

    var valueToPass = document.getElementById('reportSelect').value;
    google.script.run.withSuccessHandler(RatesGetter).getXrates(valueToPass);

    function RatesGetter(xRates) {
        alert('YAY!!!! This is the variable we need from Code.gs : ' + xRates);
        doOtherStuff(xRates)
    }
    function doOtherStuff(xRates) {
        //… Do other stuff with xRates
    }
}

或者你可以在RatesGetter()中完成其他工作。

答案 1 :(得分:0)

答案很简单,这里:function RatesGetter(xRates) {...} xRates是函数的参数,您只能在此方法中访问它。它将在callback(xRates)内传递,但是在你写“使用xRates执行其他操作”时,将无法访问它。