невозможно использовать сон или паузу в узле JS - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь сделать простой поиск в базе данных MySQL на узле js и хочу отправить результат поиска по шаблону.

    app.post('/result', jsonParser, function(req, res) {
        var sol = []
        var ins= []


        var val= req.body.typeahead
        connection.query('SELECT Sol_name from solutions where Sol_name like "%'+val+'%"', function(err, rows, fields) {
          if (err) throw err;

          for(i=0;i<rows.length;i++)
            {
              sol.push(rows[i].Sol_name);
            }
            res.end(JSON.stringify(sol));
        });
    connection.query('SELECT ins_name from installtions where ins_name like "%'+val+'%"', function(err, rows, fields) {
      if (err) throw err;

      for(i=0;i<rows.length;i++)
        {

          ins.push(rows[i].ins_name);

        }
        res.end(JSON.stringify(ins));
    });

      var context={
        sol:sol,
        ins:ins
    }
    //Above context going blank

      res.render('pages/search',context);
    });

Теперь проблема в том, что, когда я выполняю этот код, он отправляет пустой запроси массив ins, поскольку он не ожидает завершения выборки из части базы данных.

Это связано с асинхронной функцией узла js.Как я могу решить эту проблему

Я также пробую спать перед рендерингом в шаблон, но сон не работает в узле js.

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018
app.post('/result', jsonParser, function(req, res) {
    var sol = []

    var val= req.body.typeahead
    connection.query('SELECT Sol_name from solutions where Sol_name like "%'+val+'%"', function(err, rows, fields) {
      if (err) throw err;

      for(i=0;i<rows.length;i++)
        {
          sol.push(rows[i].Sol_name);
        }
      var context= {sol:sol}
      res.render('pages/search',context);
    });
});

query происходит асинхронно с вашими следующими инструкциями.Так что выполняйте код внутри обратного вызова.Если .query возвращает обещание, то вы можете использовать .then () или async / await.

Также, если удалите строку res.end, поскольку она прервет соединение, прежде чем вы сможете отобразить вашу страницу.(При использовании async / await)

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

Вы можете сделать это с помощью async/await.

app.post('/result', jsonParser, async function(req, res) {
                                ^^^^^ 
    var sol = []
    var val= req.body.typeahead
    let temp = await connection.query('SELECT Sol_name from solutions where Sol_name like "%'+val+'%"', function(err, rows, fields) {
      if (err) throw err;

      for(i=0;i<rows.length;i++)
        {
          sol.push(rows[i].Sol_name);
        }
        res.end(JSON.stringify(sol));
    });


  var context={
    sol:sol
}
//Above context going blank

  res.render('pages/search',context);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...