我确信我已接近解决这个问题了。我已经做了一些研究,并继续寻找示例,说我可以在嵌套函数中使用局部变量,但在另一方面只使用一些东西(从嵌套函数中获取变量)。最重要的是,我正在使用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时,告诉我它未定义:(
答案 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执行其他操作”时,将无法访问它。