javascript - 无法返回 url 字符串,但可以通过 console.log 进行记录。不知道为什么

标签 javascript amazon-s3 aws-lambda

我正在编写一个 lambda 函数,其中使用 s3.upload 在 s3 中存储一个文件,然后我尝试获取一个预签名 URL s3.getSignedUrl 以便外部用户可以下载该文件我上传的文件。

现在,当我放置 console.log 来记录 url 时,该 url 会记录到 cloudwatch 中,但是当我尝试在下一行中返回相同的内容时,它不起作用。

 s3.getSignedUrl('getObject', {
                    Bucket: '<Bucket-Name>',
                    Key: '<Key>',
                    Expires: signedUrlExpireSeconds
                }, function(err, url){
                    if(err) throw err;
                    console.log(url);
                    return { ...response, body: JSON.stringify({message: url}) };            
                })
            });
        });

        return { ...response, body: JSON.stringify({message: 'outsideresult'}) };

这是代码的一部分,console.log 行能够记录 url,但是 url 不会返回。

并且执行外部返回语句。

该网址按预期工作。请检查是否有人可以帮助我解决这个问题。

最佳答案

那是因为这段代码是异步执行的。当操作成功时,将调用您作为回调 function(err, url) 传递的函数。如果您在回调函数中返回某些内容,则不会返回原始范围

s3.getSignedUrl 方法不会返回您从回调内部传递的值

如果使用 console.logs 执行以下代码,您将看到 main 函数先返回,然后回调返回,而应该是相反的情况 这就是 JavaScript 的工作原理

 s3.getSignedUrl('getObject', {
                    Bucket: '<Bucket-Name>',
                    Key: '<Key>',
                    Expires: signedUrlExpireSeconds
                }, function(err, url){
                    if(err) throw err;
                    console.log(url);
                    //This is executed later. Returning something here has no effect
                    console.log("Callback returns")
                    return { ...response, body: JSON.stringify({message: url}) };            
                })
            });
        });
console.log("Main Function returns")
        return { ...response, body: JSON.stringify({message: 'outsideresult'}) };

关于javascript - 无法返回 url 字符串,但可以通过 console.log 进行记录。不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56237042/

相关文章:

java - 如何将AWS Lambda函数的结果返回到Android应用程序?

java - AWS lambda :Malformed Lambda proxy response

javascript - 在 AngularJs 中将第一个空输入集中在 html 表单中

javascript - 背景图片平滑变化

python - 从 S3 读取 ZIP 文件而不下载整个文件

amazon-web-services - 是否可以为 cloudformation 中的一组 Lambda 创建 AWS::Lambda::Version

javascript - JQuery:调用网络服务

javascript - 谁能告诉我这是如何工作的?

ruby-on-rails - 如何删除回形针中现有的样式尺寸

sql - Redshift Copy 创建与分析不同的压缩编码