javascript - 无法返回 url 字符串,尽管能够对其进行 console.log。不知道为什么
问题描述
我正在编写一个 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
没有返回。
并执行外部 return 语句。
该网址按预期工作。请检查,是否有人可以帮助我解决这个问题。
解决方案
那是因为这段代码是异步执行的。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 - 用户关闭弹窗后如何申请优惠码?
- python - Firebase admin .listen() AttributeError 的问题
- jquery - 如何使用下一个和上一个图像制作轮播?
- unity3d - android deploymant统一构建失败
- jquery - 如何获取选择器的零件名称?
- android - 在 Android 中使用 Tenserflow 计算与相机的物距
- asp.net-mvc - Kendo DataSourceRequest 对象中的反射 XSS
- flutter - 弹出警告框
- rest - Web API Core 3.1 中的参数绑定(字符串到整数)
- javascript - 如何在 li 上使用 onclick 事件来显示块(CSS)