#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. Это будет позже использовано в моем коде без необходимости вставлять его в обратный вызов запроса.