правильно обрабатывать async / await в запросе mysql

#mysql #node.js #node-mysql #node-mysql2

#mysql #node.js #узел-mysql #узел-mysql2

Вопрос:

Я пытаюсь выполнить запрос mysql, асинхронно присваивая значение const, которое будет позже использовано в моем коде.

То, что у меня есть до сих пор, это:

 const plan_free = await con1.promise().query("SELECT stripe_price1 FROM funzioni WHERE titolo='SmartBanca'")
.then( ([rows,fields]) => {
    return rows[0]['stripe_price1'];
})
.catch(console.log)
.then( () => con1.end());
console.log("Plan_free: "  plan_free);
 

но plan_free возвращает [object Object] . Я уверен, что я близок к цели, но я не понимаю, что я все еще делаю неправильно.

Редактировать: путем добавления следующих строк:

 plan_free1 = JSON.stringify(plan_free);
console.log("Plan_free: "  plan_free1);
 

Я вижу следующее содержимое для plan_free:

Plan_free: {«_events»:{},»_eventsCount»:0, «next»:null}

на самом деле это даже близко не то, чего я хочу достичь.

Комментарии:

1. Разве это не так, потому что функция является асинхронной и, следовательно, строка, в которой вы выполняете консоль. журнал вызывается до того, как ваша асинхронная задача может быть завершена?

2. Конечно, ваш консольный журнал должен быть в разделе resolved then : просто строка, следующая за строкой, где объявлен plan_free .

3. Мне нужно иметь результат после вызова, а не при обратном вызове, при обратном вызове он правильно оценивается. Так что мне нужно это исправить. См. раздел редактирование.

Ответ №1:

Хорошо, я наконец-то сделал это.

 var plain_free='';
await con1.promise().query("SELECT stripe_price1 FROM funzioni WHERE titolo='SmartBanca'")
.then( ([rows,fields]) => {
    plan_free = rows[0]['stripe_price1'];
    return plan_free;
})
.catch(console.log)
.then( () => con1.end());
            
console.log("Plan_free: "  plan_free);
 

Таким образом, я смог извлечь значение из базы данных и присвоить его переменной в node. Это будет позже использовано в моем коде без необходимости вставлять его в обратный вызов запроса.