我正在编写一个 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/