松弛螺栓等待确认()-异步



我正在尝试使用slack mode实现任务创建工作流。任务创建工作流有时需要3秒钟以上才能执行并得出结果。因此,根据文档,我在工作流开始时调用了await ack((进行确认,但ack((在工作流开始处没有发送确认响应。相反,它正在等待工作流完成,然后发送确认响应。

为了测试这一点,我用sleep语句替换了工作流,并在sleep之前用await语句调用了ack((函数。此代码未能在3秒内得到确认。因此,slack应用程序显示一条错误消息,在此处输入图像描述

// 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秒,上面的代码就可以工作,并且不会出错。这表示确认发生在工作流完成之后(回调功能完全执行(。那么,在进入睡眠(任务创建工作流(之前,我如何确认请求?

在FaaS上运行代码时使用AwsLambdaReceiver还是processBeforeResponse: true选项?如果是这样的话,这就是bolt-js框架的故意行为。提到https://github.com/slackapi/bolt-js/issues/1119其上下文。

作为变通办法,我建议使用以下任一方法:

  • 切换到非FaaS运行时(=在EC2或容器服务中运行应用程序(
  • 单独运行耗时部分(=在SQS中对任务进行排队,或从面向互联网的函数中为耗时部分调用新的lambda函数(

最新更新