@genteeklaik

Не изменяет переменную в Nodejs почему?

var f = 0;
var outx = "notest";
async function dowloadtable(){
	
	console.log("dowloadtable")
	const client = new Client({
	host:"localhost",
	user:"postgres",
	port:5432,
	password:"postgres",
	database:"postgres"
	})
	client.connect();
	var test = await client.query(`SELECT * FROM "test"`,(err,res)=>{
	if(!err){
		console.log(res.rows.length)
		console.log(res.rows);
		console.log(res.rows[0].name);
		f = 1;
		outx = res.rows[0].name;//работает вторым поэтому отправляю notest а не массив
		console.log("outx")
		console.log(outx)
		client.end;
		
	}else{
		console.log(err.message);
	}
	client.end;
	})
	
	console.log("test var client")//выводит первым почему ?
	console.log(outx)//
	return outx;
	
}

вывод программы:
627104378ff8e786012859.png
почему
test var client

выводит первым а только потом идет изменение outx внутри функции client.query
await перед client.query не спасает

просто мне надо чтобы она изменилась c nonetes на test из sql запроса
PS:функция dowloadtable() должна вывести test из sql
чтобы потом отправить в ipcMain.handle('arrinfo', dowloadtable);
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
Должно быть примерно так:
async function dowloadtable() {
    const client = new Client({
        host: "localhost",
        user: "postgres",
        port: 5432,
        password: "postgres",
        database: "postgres"
    })

    client.connect();

    const outx = await new Promise((resolve, reject) => {
        client.query(`SELECT * FROM "test"`, (err, res) => {
            if (!err) {
                resolve(res.rows[0].name);
            } else {
                reject(err);
            }

            client.end;
        })
    });

    console.log(outx)

    return outx;
}

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

await перед client.query не спасает
Await - это не волшебная инструкция "сделать хорошо". У неё есть вполне конкретное поведение и если функция, результат выполнения которой вы ждёте, не возвращает промис (как в случае с client.query), то можно хоть десять раз await написать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы