asynchronous - 异步执行函数 App Script
问题描述
我一直在挖掘,但我找不到关于如何在 Google App Script 中使用异步函数的参考或文档,我发现人们提到它是可能的,但没有提到如何......
有人可以指出我正确的方向或提供一个例子吗?可以帮助我解决这个问题的承诺、回调或其他东西。
我有这个函数,让我们调用它foo
需要一段时间才能执行(足够长,它可能会使 HTTP 调用超时)。
我想要做的是重构它,它的工作方式如下:
function doPost(e) {
// parsing and getting values from e
var returnable = foo(par1, par2, par3);
return ContentService
.createTextOutput(JSON.stringify(returnable))
.setMimeType(ContentService.MimeType.JSON);
}
function foo(par1, par2, par3) {
var returnable = something(par1, par2, par3); // get the value I need to return;
// continue in an Async way, or schedule execution for something else
// and allow the function to continue its flow
/* async bar(); */
return returnable;
}
现在我想意识到这一点,foo
因为它需要很长时间而且我不想冒超时的风险,而且那里发生的逻辑完全是客户端独立的,所以没关系,我只需要返回值,我会得到之前。
另外,我认为值得一提的是,它作为网络应用程序部署在 Google Drive 中。
从那以后已经很久了,但是添加了一些上下文,当时我想安排几件事情发生在 Google Drive 上,并且它正在超时执行,所以我正在寻找一种安全安排工作的方法。
解决方案
- 您想通过使用 Google Apps 脚本的异步处理来执行功能。
- 您希望使用时间触发器运行具有异步处理的函数。
如果我的理解是正确的,不幸的是,没有直接实现它的方法和官方文档。但作为一种解决方法,这可以通过使用 Google Apps Script API 和 fetchAll 方法来实现,该方法可以通过异步处理工作。
此解决方法的流程如下。
- 部署 API 可执行文件,启用 Google Apps Script API。
- 使用 fetchAll,请求 Google Apps Script API 的端点以运行函数。
- 当一次请求多个函数时,这些函数与 fetchAll 的异步处理一起工作。
笔记:
- 我认为 Web Apps 也可以用来代替 Google Apps Script API。
- 为了简单地使用这个解决方法,我创建了一个GAS 库。我认为你也可以使用它。
- 在此解决方法中,您还可以使用时间触发器运行具有异步处理的函数。
参考:
- 获取所有
- 将脚本部署为 API 可执行文件
- scripts.run 的 Google Apps Script API
- 基准测试:Google Apps 脚本的 UrlFetch 服务中的 fetchAll 方法
- 用于运行异步处理的 GAS 库
如果我误解了你的问题,我很抱歉。
推荐阅读
- c - pthread in C : i can't figure why pthread_cond_signal is not waking up one thread
- azure - Azure Graph API - 添加自定义签名密钥 - 证书无效:密钥值是无效证书
- sql - 如何在现有数据库中创建表?
- amazon-web-services - 如何在 Appsync 中自定义 graphql 错误响应格式?
- ios - 获取货架数量,ios swift
- python - Tensorflow 没有为具有不同变量形状的任何变量提供梯度
- oracle - 在 oracle sql 中使用 if 创建过程
- java - 正则表达式从响应中获取十六进制值
- javascript - 防止复选框在 React 中重新渲染
- node.js - 尝试创建反应应用程序时 npm 开始抛出错误