2016-03-20 78 views
0

我正在尝试返回getsignedurl里面的url。当我尝试这为url1未定义如何在函数内部返回一个函数javascript/nodejs?

function getPublicUrl(filename) { 
      var url1; 
      var file = bucket.file(filename); 

      file.getSignedUrl({ 
       action: 'read', 
       expires: '03-17-2025' 

      }, function (err, url) { 
       if (err) { 
        console.error(err); 
        return; 
       } else { 
       url1 = url 
        console.log(url); 

       } 

      }); 
     return url1; 
} 

然后在另一个函数,我会叫getpublicurl

stream.on('finish', function() { 
      req.file.cloudStorageObject = gcsname; 
      req.file.cloudStoragePublicUrl = getPublicUrl(gcsname); 
+0

它看起来像'file.getSignedUrl'是异步的,所以'return url1;'在回调函数中设置了'url1'之前运行。 – forgivenson

回答

1

file.getSignedUrl似乎是一个异步功能,您可以在getPublicUrl使用ES6 Promise,某种程度上像这样

function getPublicUrl(filename) { 
    return new Promise(function(resolve, reject) { 
    var file = bucket.file(filename); 
    file.getSignedUrl({ 
     action: 'read', 
     expires: '03-17-2025' 
    }, function(err, url) { 
     if (err) { 
     reject(err); 
     } else { 
     resolve(url); 
     } 

    }); 
    }); 
} 

stream.on('finish', function() { 
    getPublicUrl(gcsname).then(function(url) { 
    console.log(url); 
    req.file.cloudStorageObject = gcsname; 
    req.file.cloudStoragePublicUrl = url; 
    }).catch(function(err) { 
    console.log(err); 
    }); 
}); 
相关问题