Node.js:从内部调用asynchronous调用的函数返回值

我正在尝试创build一个同步函数,它创build一个随机string,并检查在Amazon Web Service S3上是否已经有该名称的文件。 我如何才能使这个function同步,因为它是对AWS的asynchronousWeb服务调用? 如果文件名已经存在,函数应该再次调用自己(recursion)直到find可用的文件名。

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 

你需要开始思考callback。 我不确定哪个条件应该再次调用相同的函数,但是您的逻辑应该在您正在进行的asynchronous调用的callback函数中。 换句话说,你的代码应该是这样的:

 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 });