запрос mysql внутри узла цикла js

0

Проблема заключается в том, что запрос является асинхронным внутри цикла, мне нужно что-то выполнить, когда завершение запроса и для всех запросов завершено, если я что-то выполнил после того, как запрос не был выполнен

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

})
  • 0
    Вы должны использовать обещания.
  • 0
    Я не знаю, как реализовать это здесь
Показать ещё 1 комментарий
Теги:
asynchronous

1 ответ

0

попробуйте сделать это:

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...
        }

    });

}
  • 0
    Используйте Promise.all() вместо написания всей этой логики самостоятельно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню