mysql查询循环节点js内部

时间:2018-02-22 17:48:47

标签: mysql node.js asynchronous

问题是查询是异步内部循环,我需要在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);
            }
        });
    }

})

1 个答案:

答案 0 :(得分: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...
        }

    });

}