如何先执行sql查询,然后再执行其余代码?

2wnc66cl  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(415)
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;
    }
  });
}

我创建了一个函数,将数据库中的所有worker都提供给我,然后将它们存储在 funclist 数组。问题在于 for 循环在查询之前运行。如何仅在查询完成后运行循环?

slhcrj9b

slhcrj9b1#

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);    
                });
    });
}

首先,我将“for”循环更改为“each”循环,并且我使用承诺,只有在完成查询和循环之后,才能将数据提供给我。

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

然后我只是在listfunc()返回假装的数据之后才渲染了jade。

bxfogqkk

bxfogqkk2#

将回调函数传递到listfunc: static listFunc(callback){...} 不返回列表,只需调用回调: callback(funclist);

相关问题