Как я могу сначала выполнить SQL-запрос, а затем остальную часть кода? - PullRequest
0 голосов
/ 25 мая 2018
static listFunc() {

  let funclist = [];

  const queryList = "SELECT * FROM func";

  mysqlModule.queryDB(database, queryList, (err, result) => {
    console.log(result[0].id);

    if (err) {
      res.status(500).json({
        "status_code": 500,
        "status_message": "internal server error"
      });
    } else {
      for (var i = 0; i < result.length; i++) {
        let func = {

          'id': result[i].id,
          'psw': result[i].senha,
          'nome': result[i].nome,
          'DoB': result[i].dataNascimento,
          'sexo': result[i].genero,
          'morada': result[i].morada,
          'permissoes': result[i].permissoes
        }
        funclist.push(func);
      }

      return funclist;
    }
  });
}

Я создал функцию, чтобы дать мне всех рабочих из моей базы данных, а затем сохранить их в массиве funclist.Проблема в том, что цикл for выполняется перед запросом.Как запустить цикл только после завершения запроса?

Ответы [ 2 ]

0 голосов
/ 26 мая 2018
static listFunc() {

    return new Promise((resolve,reject)=>{
        let funclist = [];

                mysqlModule.queryDB(database,"SELECT * FROM func", (err, result) => {
                    if (err) throw err;

                    result.forEach((result) => {
                        let func = {
                            'id': result.id,
                            'psw': result.senha,
                            'nome': result.nome,
                            'DoB': result.dataNascimento,
                            'sexo': result.genero,
                            'morada': result.morada,
                            'permissoes': result.permissoes
                        }
                        funclist.push(func);

                    });  
                    resolve(funclist);    
                });
    });
}

Сначала я изменил цикл «на» на цикл «каждый» и использовал обещание дать мне данные только после получения запроса и завершения цикла.

function clistFunc(req, res){
Func.listFunc().then((data)=>{
        res.render('admin/adminListFunc', { funclist: data});
        console.log(data);
}).catch(()=>{
    console.log('Error');
});
}

Тогда я просто рендерил нефрит только после того, как мой listFunc () вернул выдвинутые данные.

0 голосов
/ 25 мая 2018

Передайте функцию обратного вызова в listFunc:

static listFunc(callback){...}

Вместо возврата списка просто вызовите обратный вызов:

callback(funclist);

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