如何在函数javascript / nodejs中返回一个函数?

时间:2016-03-20 01:58:45

标签: javascript node.js

我正在尝试返回我进入getsignurl的网址。当我尝试这个url1是未定义的

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

1 个答案:

答案 0 :(得分: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);
  });
});