我想在生成SignedUrl之前檢查對象是否存在。然而,SignedUrl在headObject之前返回,生成指向不存在對象的鏈接。AWS如何在生成getSignedUrl之前等待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);
});
});
How to use promises with AWS headObject?
什麼是'resolve',它在哪裏定義?可能你應該從這些回調*中調用它*。 – Bergi
這在AWS Lambda上。解決方法是在函數的簽名中。 '返回新的Promise((resolve,reject)=> {'如何在調用getSignedUrl之前解析headObject - 看起來像通常的方法不起作用 –
@Bergi您能否提出一個解決方案,我是ES6和節點的新手。 js和標準的方式不起作用 –