Slack Bolt await ack() - 异步
Slack Bolt await ack() - asynchronous
我正在尝试使用松弛模式实现任务创建工作流。任务创建工作流有时需要超过 3 秒才能执行并得出结果。因此,基于 documentation,我在工作流开始时调用 await ack() 进行确认,但 ack() 并未在工作流开始时发送确认响应。相反,它正在等待工作流完成,然后发送确认响应。
为了对此进行测试,我用睡眠语句替换了工作流,并在睡眠前用等待语句调用了 ack() 函数。此代码无法在 3 秒内确认。因此,slack 应用程序显示一条错误消息 enter image description here
// handle create task modal submission
app.view('create-task', async ({ ack, ...options }) => {
await ack()
logger.debug(`Sleeping ${new Date().getTime()}`);
await new Promise((r) => setTimeout(r, 5000));
logger.debug(`Woke up ${new Date().getTime()}`);
});
另一方面,如果我将睡眠间隔减少到 2 秒,上面的代码就可以工作并且我没有收到任何错误。这表明确认是在工作流完成后发生的(回调函数已完全执行)。那么,如何在进入睡眠(任务创建流程)之前确认请求?
您是否使用 AwsLambdaReceiver
或 processBeforeResponse: true
选项 运行 在 FaaS 上配置您的代码?如果是这样,这是 bolt-js 框架的故意行为。请参阅 https://github.com/slackapi/bolt-js/issues/1119 了解其上下文。
作为解决方法,我建议使用以下任一方法:
- 切换到 non-FaaS 运行时间(=运行 你的应用程序在 EC2 或容器服务中)
- 运行 time-consuming 部分分开(=在 SQS 中排队任务或从 internet-facing 函数中为 time-consuming 部分调用新的 lambda 函数)
我正在尝试使用松弛模式实现任务创建工作流。任务创建工作流有时需要超过 3 秒才能执行并得出结果。因此,基于 documentation,我在工作流开始时调用 await ack() 进行确认,但 ack() 并未在工作流开始时发送确认响应。相反,它正在等待工作流完成,然后发送确认响应。
为了对此进行测试,我用睡眠语句替换了工作流,并在睡眠前用等待语句调用了 ack() 函数。此代码无法在 3 秒内确认。因此,slack 应用程序显示一条错误消息 enter image description here
// handle create task modal submission
app.view('create-task', async ({ ack, ...options }) => {
await ack()
logger.debug(`Sleeping ${new Date().getTime()}`);
await new Promise((r) => setTimeout(r, 5000));
logger.debug(`Woke up ${new Date().getTime()}`);
});
另一方面,如果我将睡眠间隔减少到 2 秒,上面的代码就可以工作并且我没有收到任何错误。这表明确认是在工作流完成后发生的(回调函数已完全执行)。那么,如何在进入睡眠(任务创建流程)之前确认请求?
您是否使用 AwsLambdaReceiver
或 processBeforeResponse: true
选项 运行 在 FaaS 上配置您的代码?如果是这样,这是 bolt-js 框架的故意行为。请参阅 https://github.com/slackapi/bolt-js/issues/1119 了解其上下文。
作为解决方法,我建议使用以下任一方法:
- 切换到 non-FaaS 运行时间(=运行 你的应用程序在 EC2 或容器服务中)
- 运行 time-consuming 部分分开(=在 SQS 中排队任务或从 internet-facing 函数中为 time-consuming 部分调用新的 lambda 函数)