Javascript 无法返回url字符串,但可以对其进行console.log。不知道为什么
我正在编写一个lambda函数,其中使用s3.upload在s3中存储一个文件,然后尝试获取一个预先签名的URL s3.getSignedUrl,以便外部用户可以下载我上载的文件 现在,当我使用console.log来记录url时,url会被记录到cloudwatch中,但是当我试图在下一行返回相同的url时,它就不起作用了Javascript 无法返回url字符串,但可以对其进行console.log。不知道为什么,javascript,amazon-s3,aws-lambda,Javascript,Amazon S3,Aws Lambda,我正在编写一个lambda函数,其中使用s3.upload在s3中存储一个文件,然后尝试获取一个预先签名的URL s3.getSignedUrl,以便外部用户可以下载我上载的文件 现在,当我使用console.log来记录url时,url会被记录到cloudwatch中,但是当我试图在下一行返回相同的url时,它就不起作用了 s3.getSignedUrl('getObject', { Bucket: '<Bucket-Name>',
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不会返回
执行外部返回语句
不过,url的工作方式与预期相同。如果有人能帮我解决这个问题,请查收。因为最后一句话,即 返回{…响应,主体:JSON.stringify{message:'outheresult'} 在回调之前执行
`function(err, url){
if(err) throw err;
console.log(url);
return { ...response, body: JSON.stringify({message: url}) };
})`
因此,当执行此回调时,它只在控制台上记录语句。因此,在逻辑中进行一些更新 这是因为此代码是异步执行的。当操作成功时,将调用作为回调函数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'}) };