在myFunc真正结束后如何使otherFunc()运行?
async function func() {
const res = await (() => new Promise(r => google.script.run.withSuccessHandler((e) => r(myFunc(e))).serverFunc()))();
console.log(res);
otherFunc(); //this function still executed before myFunc end, except i use setTimeOut
console.log("done");
}
这是myFunc()内部的内容
function myFunc(){
var tbody = document.getElementById("table-permintaan");
var thead = tbody.firstElementChild;
while (tbody.hasChildNodes())
tbody.removeChild(tbody.firstChild);
tbody.appendChild(thead);
google.script.run.withSuccessHandler(function(nama){
dataArray.forEach(function(r){
justCreatingTableRows();
}).listNamaBarang();
}
}
这是otherFunc()内部的内容
function otherFunc(){
var btns = document.getElementsByTagName('button');
var mdls = document.getElementsByClassName("modal_detail");
var cds = document.getElementsByClassName("close_detail");
for(var i = 0;i<btns.length-1;i++){
btns[i].addEventListener("click",function(){
document.getElementById("mdl"+this.id.slice(3)).style.display = "block";
});
mdls[i].style.display = "none";
}
for(var i=0;i<cds.length;i++){
cds[i].addEventListener("click",function(){
for(var j = 0;j<mdls.length;j++){
console.log(this.id.slice(3) , mdls[j].id);
if (this.id.slice(3) == mdls[j].id.slice(3)) {
mdls[j].style.display = "none";
return;
}
}
});
}
}
使用promise不能使otherFunc()在myFunc()之后运行,我仍然需要使用setTimeOut,这对这种情况不利。
答案 0 :(得分:4)
修改脚本后,如何进行修改?请认为这只是几个答案之一。
google.script.run
的功能中也使用了myFunc()
。 google.script.run与异步进程一起运行。这样,在运行func()
时,serverFunc()
,myFunc(e)
和otherFunc()
依次运行,而function(nama)
中的google.script.run.withSuccessHandler(function(nama){ })).listNamaBarang()
则按此顺序运行。这样,您的问题就会出现。 TheMaster's comment已经提到了这一点。
myFunc()
一样修改func()
。async function myFunc() {
var tbody = document.getElementById("table-permintaan");
var thead = tbody.firstElementChild;
while (tbody.hasChildNodes())
tbody.removeChild(tbody.firstChild);
tbody.appendChild(thead);
// Below script was modified.
const res = await (() => new Promise(r => google.script.run.withSuccessHandler(function(nama) {
dataArray.forEach(function(r){justCreatingTableRows(r)});
return r("done at myFunc()");
}).listNamaBarang()))();
console.log(res) // done at myFunc()
}
dataArray
。
google.script.run
是HTML服务页面中可用的异步客户端JavaScript API,可以调用服务器端Apps脚本函数。