好的,现在我这样做:
google.script.run
.withSuccessHandler(updateOutput)
.withFailureHandler(errorOutput)
.finish();
然后
function updateOutput(info)
{
var br='<br />';
var outputDiv = document.getElementById('status');
outputDiv.innerHTML = 'First Logic Compete' + br + br +'GotoLogic: ' +info.slide+ br + 'Copy text: ' + info.text + br ;
}
有没有办法减少调用另一个函数的需要?并直接与第一个函数内的google.script.run
结果对象进行交互?
编辑,这也不起作用,返回的数字为空:
var object = google.script.run
.withSuccessHandler(function (number) {
document.getElementById('bugLink').href = "https://bug.com/issues/" + number;
document.getElementById('time').innerHTML = number;
})
.finish();
你是说这个吗?
这是客户端:
google.script.run
.withSuccessHandler(function(html){
document.getElementById('id').innerHTML=html;
})
.getHtml();
服务器端:
function getHtml() {
return '<h1>Hello World</h1>';
}
每当完成其他代码时由其他代码调用的处理程序是异步通信的要求。如果需要,可以内联定义处理程序:
const TASK = google.script.run.withFailureHandler(errorOutput);
TASK
.withSuccessHandler((info, userObj) => {
...
})
.foo();
TASK
.withSuccessHandler((otherInfo, userObj) => {
...
})
.otherFoo();
...
或者,如果你鄙视回调,你可以在客户端HTML中使用Promises:
const makeAppsScriptCall = (fnName, obj, ...args) => {
return new Promise((resolve, reject) => {
let TASK = google.script.run
.withSuccessHandler(resolve)
.withFailureHandler(reject);
if (obj) {
TASK = TASK.withUserObject(obj);
}
if (TASK[fnName] === undefined) {
reject("'" + fnName + "' is not a global function in your Apps Script project");
} else {
TASK[fnName].apply(null, args);
}
});
};
function doStuffAsPromises(userObjBtn) {
makeAppsScriptCall("finish", userObjBtn, myarg1, myarg2, myarg3, ...)
.then(...)
.catch(...);
}
(显然,如果客户端浏览器不支持Promises或“rest parameters”的扩展语法,则需要根据需要进行polyfill / modify。)
参考