【问题标题】:mysql query inside loop node js循环节点js内的mysql查询
【发布时间】:2018-08-02 16:42:45
【问题描述】:

问题是查询在循环内是异步的,我需要在 for 和所有查询完成时执行某些操作,如果我在 for 查询尚未执行之后执行某些操作

   app.post('/consulta',(req,res)=>{
    var data = req.body.frase;
    let consulta;
    let respuesta = [];

    for(let i=1;i<data.length;i++){
        consulta = `SELECT * FROM imagen WHERE nombre = "${data[i-1] +' '+ data[i]}"`;
        connection.query(consulta, function (error, results, fields) {
            if (error) throw error;

            if(results.length > 0){ // Si existe una seña que tenga 2 palabras
                data[i-1] = data[i-1] +" "+data[i]; // Unidos jamas seran vencidos
                data.splice(i, 1);
            }
        });
    }

})

【问题讨论】:

  • 你应该使用承诺。
  • 这里不知道怎么实现
  • 你应该使用Promise.all()

标签: mysql node.js asynchronous


【解决方案1】:

尝试这样做:

app.post('/consulta',(req,res)=>{
    var data = req.body.frase;
    let consulta;
    let respuesta = [];

    query(data).then(result => {

        // implement your success case...

    }).catch(err => {
        //throw exception here...
    });

});

function query(data){

    return new Promise((resolve, reject) => {

        var counter = 0;

        if (data.length > 0){

            for(let i=1;i<data.length;i++){

                consulta = `SELECT * FROM imagen WHERE nombre = "${data[i-1] +' '+ data[i]}"`;

                connection.query(consulta, function (error, results, fields) {
                    if (error) reject(error); //terminate the promisse...

                    if(results.length > 0){ // Si existe una seña que tenga 2 palabras
                        data[i-1] = data[i-1] +" "+data[i]; // Unidos jamas seran vencidos
                        data.splice(i, 1);
                    }

                    counter++;

                    if (counter >= data.length){
                        resolve("Everything OK");
                    }

                });

            }

        } else {
            reject("There are no data"); //terminate the promise...
        }

    });

}

【讨论】:

  • 使用 Promise.all() 而不是自己编写所有这些逻辑。
猜你喜欢
  • 1970-01-01
  • 2017-10-07
  • 2021-03-19
  • 2021-08-15
  • 2019-01-20
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多