2016-03-20 10 views
0

私はgetsiedurlの中に入る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; 
} 

をしようとすると、その後、別の関数に私は

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

'file.getSignedUrl'は非同期なので、' url1; 'は' url1'がコールバック関数で設定される前に実行されます。 – forgivenson

答えて

1

file.getSignedUrl getpublicurlを呼ぶだろう非同期関数のようです、あなたはいくつかの方法この

のように、 getPublicUrlES6 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); 
    }); 
}); 
関連する問題