Как передать функцию, которая не будет вызываться автоматически (Javascript) - PullRequest
0 голосов
/ 07 июня 2018

хорошо, вот оно:

app.post('/upload', upload.single('songFile'), (req, res) => {
    cloud_bucket.upload(req, res, console.log, res.send('1'));
  });

рассматриваемая функция: res.send ('1');

здесь это cloud_bucket.upload:

module.exports = {
  upload: function (req, res, next, fin) {
      fileToBucket(req, res, next, fin);
  }
}
//send file to cloud bucket
fileToBucket = (req, res, next, fin) => {
    const file = req.file;
    var url = '';
    const gcsname = uuidv4() + file.originalname;
    file2 = myBucket.file(gcsname);
    const stream = file2.createWriteStream({metadata: {contentType: file.mimetype}});
    stream.on('error', (err) => {
      file.cloudStorageError = err;
      next(err);
    });
    stream.on('finish', () => {
      file.cloudStorageObject = gcsname;
      file2.makePublic().then(() => {
        file.cloudStoragePublicUrl = getPublicUrl(gcsname);
        url = file.cloudStoragePublicUrl;
        return url;
      }).then((url) => {
        console.log('upload complete');
        metaToDb(req, url, res);

      });
    });
    stream.end(file.buffer);
}

//send metadata to mysql
metaToDb = (req, url, res) => {
  Song.create({
    title: req.body.title,
    description: req.body.description,
    genres: req.body.genres,
    owner: req.session.user.idUsers,
    dateUploaded: new Date(),
    URL: url
  })
}

Как видите, я не вызываю fin () в любом месте функции.но все же res.send ('1') вызывается, если я не уберу его из начального вызова функции.

кажется, что он вызывается автоматически, когда fileToBucket завершается (не асинхронные вызовы), но я бынравится называть это в одном из обещаний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...