如何让客户端代码等待google.script.run完全执行?

How to make the client-side code wait for the full execution of google.script.run?

我有一个 Google Apps Script WebApp,它依赖于从 Google 电子表格生成的对象数组。该应用程序使用 jquery 和 miniSearch 来提供用户功能。

目前,我 运行 在 HTML 标记的开头带有成功处理程序的服务器端函数,并使用在它之前声明的对象数组更新“全局”变量。

Index.html:

<script>
let data
google.scripts.run
.withSuccessHandler(payload=>{
data = payload}).getLinks() //[{link:body}, {link1:body1}]
setTimeout(()=>{
const documents = data
miniSearch = new miniSearch(...)
miniSearch.addAll(documents)}, 2500)
...
</script>

Code.gs

function getLinks(){
        .
        .
        .
        let values = sheet.getRange(1, 1, lastRow, lastCol)
        for (let row = 0; row < lastRow; row++) {
            let entry = new Data(row + 1, values[row][0], values[row][1], values[row][2], values[row][3], values[row][4], values[row][5], values[row][6])
            allTitles.push(entry)
    }
return allTitles
}

我通过在 miniSearch 索引执行(依赖于上述数组)上设置 setTimeout 为 2500 毫秒来模拟等待 google.scripts.run 完成,大部分时间它都有效。

问题是,应用程序在给定时间段内第一次 运行 之前,内容未缓存并且执行时间比 setTimeout 长,因此,正如预期的那样,搜索功能由于 运行 上没有数据,因此出现错误。

我的问题是:如何让代码等待并确认google.scripts.run已经返回了需要的数据?

我试过用常规的 promises 或异步等待函数来做,但据我了解,google 运行它的服务器是异步运行的,没有办法告诉(在代码中,那是) 如果它完成了,我已经尝试 运行 将其设置为 $(function(){google.script.run..}) 以尝试在 DOM 加载后立即加载内容,但无济于事..

确保它完成的唯一方法是执行此操作。如果它没有响应,那么问题出在 getLinks、Data 或任何 miniSearch 中。

<script>
  const documents = null;
  google.scripts.run.withSuccessHandler( function(payload) {
    documents = payload;
    miniSearch = new miniSearch(...);
    miniSearch.addAll(documents);
  }.getLinks(); //[{link:body}, {link1:body1}]
...
</script>