Почему функция грузит всю память сервера? js

имеется код:

async function checkQuery(object) {
  i = 0;
  while (i < urls[1].length) {
    sql = 'SELECT id FROM cases WHERE case_number="' + urls[2][i] + '"';
    await connection.execute(sql, function(err, results, fields, rows) {
      //console.log('... . Ошибка: ' + err + ', Данные: ' + results[0].objid + ', мета-данные полей: ' + fields + '.');
      if(results[0] === undefined) {
        console.log('Совпадение не найдено');
        i++;
      } else {
        console.log('Такое дело есть!');
        urls[0].splice(i, 1);
        urls[1].splice(i, 1);
        urls[2].splice(i, 1);
      }
    });  
  }
  console.log(urls[2].length);
}

Почему-то он нагружает оперативную память сервера полностью. Может кто знает как это исправить?


Ответы (1 шт):

Автор решения: uberchel

У вас цикл не ждет ответа от connection, он работает синхронно, как вариант можно использовать новый вариант работы с for, либо вывести асинхронную функцию отдельно от цикла while

async function checkQuery(object) {
    for (const item of urls[2]) {
        await connection.execute('SELECT id FROM cases WHERE case_number="' + item + '"', function(err, results, fields, rows) {
            if(results[0] === undefined) {
                console.log('Совпадение не найдено');
            } else {
                console.log('Такое дело есть!');
                urls[0].splice(i, 1);
                urls[1].splice(i, 1);
                urls[2].splice(i, 1);
            }
        });
    }
}
→ Ссылка