我正在尝试创建一个同步函数,该函数创建一个随机字符串并检查Amazon Web Service S3上是否已存在具有该名称的文件。我怎样才能使函数同步,因为它是对AWS的异步Web服务调用?如果文件名已经存在,则该函数应该再次调用(递归),直到找到可用的文件名。
var generateUniqueAWSKey = function(prefix) {
var unique = generateRandomString(); // generates a random string
var name = prefix + unique + '.png';
awss3.headObject({ Bucket: 'pics', Key: name }, function(error, result) {
if (!error) {
unique = generateUniqueAWSKey(prefix);
}
});
return unique;
};
var filename = generateUniqueAWSKey('prefix_');
// more code below using the filename
答案 0 :(得分:2)
你需要开始考虑回调。我不确定哪个条件应该再次调用相同的函数,但是你的逻辑应该存在于你正在进行的异步调用的回调函数中。换句话说,您的代码应如下所示:
function generateUniqueAWSKey (prefix, callback) {
var unique = generateRandomString(); // generates a random string
var name = prefix + unique + '.png';
awss3.headObject({ Bucket: 'pics', Key: name }, function(error, result) {
if (error) {
// error handling here
return generateUniqueAWSKey(prefix, callback); // say you do recursion here
}
else {
return callback(unique); // no need for recursion; return result
}
});
};
generateUniqueAWSKey('prefix_', function (name) {
var filename = name;
// more code below using the filename
});