0
 const config = require('./config');
   const mysql = require('mysql2/promise'); 
   var result ;

async function main() {  

    const connection = await mysql.createConnection(config);  
    const qantity= await connection.execute('SELECT count(1) FROM `quotes`');  
    connection.end()
    return qantity[0][0]['count(1)'];  
}   


main().then((res) =>{

       result = res
       console.log(res)
       //3

});
 console.log(result)
 //undefined 



 - Элемент списка
  • Потому что сначала выводится result, затем выполняется запрос к бд, затем выводится res – SwaD Sep 10 '23 at 09:08
  • Обновил свой ответ. В следующий раз пожалуйста, если появились какие-то вопросы, то спрашивайте в комментарии к ответу, а не изменяйте вопрос. – Павел Ериков stand with Russia Sep 10 '23 at 09:34
  • это же асинхронная функция.... а console.log исполняется синхронно. на тот момент в result ещё нет ничего...запрос ещё не успел выполниться........см. ответы дубликаты...исправить - никак - делай так в then или см. вот этот ответ https://ru.stackoverflow.com/a/1476674/191482 – Алексей Шиманский Sep 10 '23 at 09:40

1 Answers1

0

Потому, что сначала вы вызываете функцию main, которая выполняется асинхронно. Т.к. она асинхронная, то javascript идет дальше по коду и выполняет строчку console.log(result), и выводит undefined т.к. вы переменной result ничего не присвоили.

И как только функция main закончила свою работу, вызывается стрелочная функция в then, в которой присваивается значение result, ну и выполняется строчка console.log(result).


Увидел, обновление вопроса...

Можно в then после присвоения result вызывать функцию, которая продолжит выполнение кода. Например:

main().then((res) =>{
  result = res;
  console.log(res);
  someNextFunction();
});

function someNextFunction() { console.log(result); }

Или создать еще одну асинхронную функцию, куда поместить вызов main и дождаться его выполнения (await), после чего вызвать console.log. Например:

async function run() {
  await main().then((res) => {
    result = res;
    console.log(res);
  });

console.log(result); }

run();