Async \ Await с обещанием не работает должным образом - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть функция Async, и я отправляю в другую функцию Async, которая ожидает разрешения для разрешения, но по какой-то причине не ожидает разрешения.

Router.get("/openPage/:id",async(res,req)=>{
  var parms = res.getHeaderParamas();
  let select = OpenTemplate(parms);
  let theResualt = await select.then(data=>data);
  connection.end();
  res.returnJson(theResualt,"Success");
});


  async function OpenTemplate(header){
    return new Promise(res=>{
      var query = `SELECT * FROM streamingpages WHERE ID=${header.routerParamas.id}`;
      connection.connect((err)=>{res(err)});
      connection.query(query,(error, results, fields)=>{
          if(error) res(error)
          console.log(results);
          res(results);
      });
    })

}

Я не понимаю, что я делаюнеправильно ??

1 Ответ

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

В этой строке:

 connection.connect((err)=>{res(err)});

Вы разрешаете обещание при установлении соединения, а не при выполнении запроса.Вы не можете выполнить Обещание более одного раза.

 function makeQuery(connection, query) {
  return new Promise((resolve, reject) => {
    connection.connect(error => {
      if(error) return reject(error);
      connection.query(query, (error, results, fields) => {
        if(error) return reject(error);

        console.log(results);
        resolve(results);

        connection.close(); // actually you should open the connection to the db once ...
      });
    });
  });
}

const openTemplate = header =>
  makeQuery(connection, `SELECT * FROM streamingpages WHERE ID=${header.routerParamas.id}`); // MYSQL INJECTION POSSIBLE!!!!

Router.get("/openPage/:id",async(res,req)=>{
 var params = res.getHeaderParams();
 const result = await openTemplate(parms);
 res.returnJson(result, "Success");
});
...