@grearte

Как передать параметр в Promise?

Нужно передать переменную partFilename из router.get в getFilename.
Возможно, что то не так делаю, так как полистал документацию и гугол, промиса с параметрами не нашел.
Если этот вариант неактуален, то опишите альтернативу.

var getFilename = new Promise(<b>partFilename</b>, (resolve, reject) => {
  var files = fs.readdirSync(uploadPath);
  files.forEach(file => {
      var comparedPart = file.split('.')[0];
      if (comparedPart == partFilename) {
        resolve(file);
      }
    });
  reject(new Error('404'));
  });

router.get('/:id', function(req, res, next) {
  var partFilename = req.params.id;
  getFilename(<b>fileName</b>)
    .then(
      result => {
        res.download(uploadPath + result, result, function(err) {
          if (err) {
            console.log(err);
          }
        });
      },
      error => {
        res.send(error.message);
      }
    );
});
  • Вопрос задан
  • 2810 просмотров
Решения вопроса 1
@de1m
Я не тестировал, но должно быть как-то так:
var getFilename = function (partFilename) {
    return new Promise((resolve, reject) => {
        var files = fs.readdirSync(uploadPath);
        files.forEach(file => {
            var comparedPart = file.split('.')[0];
            if (comparedPart == partFilename) {
                resolve(file);
            }
        });
        reject(new Error('404'));
    });
}

Но вообще, я бы асинхронную функцию тут использовал
var getFilename = function (partFilename) {
    return new Promise((resolve, reject) => {
        var files = fs.readdir(uploadPath, (err, files) => {
            if (err) {
                reject(new Error('404'));
            } else {
                files.forEach(file => {
                    var comparedPart = file.split('.')[0];
                    if (comparedPart == partFilename) {
                        resolve(file);
                    }
                });
            }
        })
    });
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы