Javascript AWS Lambda上的松弛斜杠命令延迟响应
我正在尝试对Slack进行集成,它查询服务器并将一些结果返回给用户。搜索有时需要的时间比窗口松弛允许的响应时间长,因此我需要立即返回状态200 如何使用lambda函数执行此操作?我尝试使用回调函数,然后将数据发送到另一个lambda服务,但原始函数等待它返回,这意味着我仍然会被查询的服务器阻塞 这就是我的工作Javascript AWS Lambda上的松弛斜杠命令延迟响应,javascript,node.js,amazon-web-services,aws-lambda,slack-api,Javascript,Node.js,Amazon Web Services,Aws Lambda,Slack Api,我正在尝试对Slack进行集成,它查询服务器并将一些结果返回给用户。搜索有时需要的时间比窗口松弛允许的响应时间长,因此我需要立即返回状态200 如何使用lambda函数执行此操作?我尝试使用回调函数,然后将数据发送到另一个lambda服务,但原始函数等待它返回,这意味着我仍然会被查询的服务器阻塞 这就是我的工作 var rp=require('request-promise'); exports.handler=(事件、上下文、回调)=>{ //我想让它发回我的状态200,这样命令就不会超时了
var rp=require('request-promise');
exports.handler=(事件、上下文、回调)=>{
//我想让它发回我的状态200,这样命令就不会超时了
回调(空,“正在工作…”);
//我希望这篇文章异步进行,以便slack在搜索过程中获得回调响应
//但这仍然要等到post返回后才能解析回调
变量选项={
方法:“POST”,
uri:“https://url-to-other.service",
正文:{
“团队”:event.team,
“标签”:event.label,
“url”:event.aresponse\u url
},
json:true
};
rp(选项);
};代码>在单个lambda函数中不起作用,因为一旦调用callback()
lambda容器就会死亡。您可以做的是在调用callback()
之前使用这个lambda函数,它将发布到您的slack通道url
下面是一个如何工作的示例(这不是100%,但应该能让你很好地了解它的工作原理。)
函数1:(接收slack事件,调用第二个函数,立即返回200
功能2:(接收第一个lambda事件,等待搜索完成,发布到松弛通道)
谢谢!这正是我需要的。多个lambda函数是我最初的策略,但我不知道如何立即返回状态200以防止请求超时。我会启动下一个lambda函数,但它仍会等待第二个函数完成运行,然后再发送回任何内容。
let AWS = require('aws-sdk')
exports.handler = (event, context, callback) => {
let lambda = new AWS.Lambda()
let params = {
FunctionName: 'YOUR_SECOND_FUNCTION_NAME',
InvocationType: 'Event', // Ensures asynchronous execution
Payload: JSON.stringify({
team: event.team,
label: event.label,
url: event.aresponse_url
})
}
return lambda.invoke(params).promise() // Returns 200 immediately after invoking the second lambda, not waiting for the result
.then(() => callback(null, 'Working...'))
}
let rp = require('request-promise')
exports.handler = (event, context, callback) => {
let searchOptions = {
method: 'POST',
uri: 'https://url-to-other.service',
body: {
'team': event.team,
'label': event.label,
'url': event.aresponse_url
},
json:true
}
return rp(searchOptions)
.then(result => {
let slackOptions = {
method: 'POST',
uri: 'YOUR_SLACK_CHANNEL_URL',
body: {
text: JSON.stringify(result) // I stringified the search result for you for ease's sake, not sure what you need here
},
json: true
}
return rp(slackOptions)
})
.then(() => { callback(null, 'good measure') })
}