[英]Node.js: Returning value from function with async call inside
我正在嘗試創建一個同步函數,該函數創建一個隨機字符串並檢查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
您需要開始考慮回調。 我不確定哪個條件應再次調用相同的函數,但是您的邏輯應該在所進行的異步調用的回調函數上。 換句話說,您的代碼應如下所示:
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
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.