Javascript Node.js:从内部包含异步调用的函数返回值
我正在尝试创建一个同步函数,该函数创建一个随机字符串,并检查AmazonWebServices3上是否已经有一个同名文件。我如何使函数同步,因为它内部是对AWS的异步web服务调用?如果文件名已经存在,函数应该再次调用自身(递归),直到找到可用的文件名Javascript Node.js:从内部包含异步调用的函数返回值,javascript,node.js,asynchronous,amazon-web-services,Javascript,Node.js,Asynchronous,Amazon Web Services,我正在尝试创建一个同步函数,该函数创建一个随机字符串,并检查AmazonWebServices3上是否已经有一个同名文件。我如何使函数同步,因为它内部是对AWS的异步web服务调用?如果文件名已经存在,函数应该再次调用自身(递归),直到找到可用的文件名 var generateUniqueAWSKey = function(prefix) { var unique = generateRandomString(); // generates a random string var
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
您需要开始考虑回调。我不确定哪个条件应该再次调用同一个函数,但是您的逻辑应该在您正在进行的异步调用的回调函数中。换句话说,您的代码应该如下所示:
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
});