Ждите функцию в expressjs - PullRequest
0 голосов
/ 24 марта 2019

Я хочу выполнить res.render () после того, как getinfo () завершит свое выполнение, которое занимает около нескольких секунд. Как этого добиться?

app.post('/fetch', function(req,res){
  global.inputContent = req.body.textField;
  getinfo();
  res.render('down.ejs', {ID:global.vinfo.id,title:global.vinfo.title,url:global.vinfo.url,thumb: global.vinfo.thumbnail, des: global.vinfo.description, filename:global.vinfo._filename,format:global.vinfo._format,formatID:global.vinfo.format_id});
 });

Я пробовал async / await следующим образом:

app.post('/fetch', aync function(req,res){
  global.inputContent = req.body.textField;
  await getinfo();
  res.render('down.ejs', {ID:global.vinfo.id,title:global.vinfo.title,url:global.vinfo.url,thumb: global.vinfo.thumbnail, des: global.vinfo.description, filename:global.vinfo._filename,format:global.vinfo._format,formatID:global.vinfo.format_id});
 });

1 Ответ

0 голосов
/ 24 марта 2019

Express использует асинхронные функции в стиле обратного вызова, поэтому он не может напрямую обрабатывать async функции (которые основаны на Promise).

Вместо этого, если getinfo() возвращает Обещание (например, если оно определено как async), вам придется использовать традиционные методы .then / .catch, например:

app.post('/fetch', function(req, res, next) {
  global.inputContent = req.body.textField;
  getinfo();
    .then(() => {
       res.render('down.ejs' {
         ID: global.vinfo.id,
         title: global.vinfo.title,
         url: global.vinfo.url,
         thumb: global.vinfo.thumbnail,
         des: global.vinfo.description, 
         filename: global.vinfo._filename,
         format: global.vinfo._format,
         formatID: global.vinfo.format_id,
       });
     })
    .catch(next);
 });

В качестве альтернативы вы можете заменить маршрутизатор по умолчанию Express на модуль, подобный express-обещание-router , который способен обрабатывать async / await и традиционные обещания в функциях обработчика маршрутизатора.

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