Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AWS Lambda上的松弛斜杠命令延迟响应_Javascript_Node.js_Amazon Web Services_Aws Lambda_Slack Api - Fatal编程技术网

Javascript AWS 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,这样命令就不会超时了

我正在尝试对Slack进行集成,它查询服务器并将一些结果返回给用户。搜索有时需要的时间比窗口松弛允许的响应时间长,因此我需要立即返回状态200

如何使用lambda函数执行此操作?我尝试使用回调函数,然后将数据发送到另一个lambda服务,但原始函数等待它返回,这意味着我仍然会被查询的服务器阻塞

这就是我的工作

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') })
}