簡體   English   中英

Node.js:從內部帶有異步調用的函數返回值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM