Как я могу написать этот фрагмент кода узла JS асинхронно - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь обработать почтовый запрос.Я хочу получить запрос после запроса, выполнить запрос и получить некоторые данные, а затем изменить несколько переменных.Затем просмотрите файл index.ejs вместе с измененными переменными.

Он работает нормально.Но проблема здесь в том, что сначала отображается страница, а после нее обновляются переменные.Как мне поступить в обратном порядке?Я думаю, может быть, я должен изменить свой код асинхронно.Я не знаю, как это сделать.

 app.post('/id',function (req, res) {

    // Run a mysql query

 con.query('SELECT * FROM new_table ORDER BY RAND() LIMIT 9', 
 function(error,results, fields) {
        if (error)
            throw error;

       //update some variables here

    });

// render the index.ejs file and an updated varible (ejs and express stuff) 

 res.render("index",{
changed_variable:changed_variable
   });

});

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Код уже асинхронный.Если вы хотите отобразить страницу после того, как запрос завершил обработку, вы должны разместить ее внутри обратного вызова.

con.query('SELECT * FROM new_table ORDER BY RAND() LIMIT 9', 
function(error,results, fields) {
    if (error)
        throw error;

    //update some variables here
    res.render("index",{
      changed_variable:changed_variable
    });

})
0 голосов
/ 18 декабря 2018

Вы можете просто поместить свой res.render в обратный вызов при успешном запросе, как показано ниже:

con.query('SELECT * FROM new_table ORDER BY RAND() LIMIT 9', function(error,results, fields) {
  if (error)
    throw error;

    //update some variables here
    res.render("index",{ changed_variable:changed_variable });
})

Однако рекомендуется использовать модуль async, установить его следующим образом:

npm install --save async

С помощью модуля async вы можете написать что-то вроде этого.

router.get('/id', function(req, res) {
  async.series([
    con.query('SELECT * FROM new_table ORDER BY RAND() LIMIT 9', function(error,results, fields) {
        if (error)
            throw error;

       //update some variables here

    })
  ],
  function(err, results) {
    res.render("index",{ changed_variable:changed_variable });
  })
})
...