【发布时间】:2017-06-09 03:12:11
【问题描述】:
我正在尝试在生成 SignedUrl 之前检查对象是否存在。但是,SignedUrl 在 headObject 之前返回,生成指向不存在对象的链接。
var params = {
Bucket: bucket,
Key: path,
};
var signedURL = "none";
s3.headObject(params, function (err, metadata) {
if (err && err.code === 'NotFound')
params.Key = 'no_image.png';
params.Expires = 900;
s3.getSignedUrl('getObject', params, function (err, url) {
signedURL = url;
if (err)
console.log("Generation of Signed url failed");
else
console.log("Generated Signed url");
});
});
console.log("Generating PreSigned Link ... Success");
return resolve(signedURL);
看起来下面的代码也不起作用:
var someVar = s3.headObject(params);
someVar.then(() ...
按照建议查看这篇文章 - Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference,它告诉我为什么会发生这种情况,但没有告诉我如何解决它。
这是我尝试在回调中移动返回的新代码:
s3.headObject(params, function (err, metadata) {
params.Expires = 900;
if (err && err.code === 'NotFound')
params.Key = 'no_image.png';
s3.getSignedUrl('getObject', params, function (err, url) {
if (err)
return resolve("none");
else
return resolve(url);
});
});
【问题讨论】:
-
resolve是什么,它在哪里定义?可能你应该从这些回调中调用它。 -
这是在 AWS Lambda 上。 resolve 在函数的签名中。 ` return new Promise((resolve, reject) => {` 如何在调用 getSignedUrl 之前解析 headObject - 看起来通常的方法不起作用。
-
@Bergi 你能提出一个解决方案吗?我是 ES6 和 node.js 的新手,标准方法不起作用。
-
正如我所说,将
resolve调用移到回调中。基本上就是@the_bluescreen dib 下面的内容 -
嗨@Bergi,谢谢,但这对我不起作用!我在主要问题中添加了代码。删除了变量signedURL。
标签: node.js ecmascript-6 promise aws-lambda