问题
我这样做了:
- const mysql = require('mysql2/promise')
- const pool = mysql.createPool({
- host: 'localhost',
- user: 'root',
- password: '',
- database: 'nodejs',
- waitForConnections: true,
- connectionLimit: 10,
- queueLimit: 0
- })
- async function query(query) {
- const result = await pool.query(query)
- return result[0]
- }
- console.log(query('SELECT * FROM `users`'))
复制代码
我回来了
承诺{ <待定> }
如何从查询数据库中获取结果,就像 PHP 一样?
在 PHP 中,我从来没有做过像 async/await 和 promises 这样的事情。 . .
我也尝试过使用 mysql:
- const mysql = require('mysql')
- const db = mysql.createConnection({
- host : 'localhost',
- user : 'root',
- password : '',
- database : 'nodejs'
- })
- function query(query) {
- db.query(query, (err, result) => {
- if (err) throw err
- return result
- })
- }
- console.log(query('SELECT * FROM `users`'))
复制代码
但我得到一个未定义的结果
回答
我对 MySQL 和您正在使用的库不是很熟悉。
然而,你得到了一个 Promise { <pending> } 响应,因为您没有等待查询执行。
由于该函数被标记为 async 并且还执行异步操作,因此它返回一个需要等待解决的 Promise。
下面的代码应该可以工作:
- const mysql = require('mysql2/promise')
- const pool = mysql.createPool({
- host: 'localhost',
- user: 'root',
- password: '',
- database: 'nodejs',
- waitForConnections: true,
- connectionLimit: 10,
- queueLimit: 0
- })
- async function query(query) {
- const result = await pool.query(query)
- return result[0]
- }
- (async () => {
- const queryResult = await query('SELECT * FROM `users`');
- console.log(queryResult);
- } )();
复制代码
要了解 async await 的工作原理,请考虑以下代码:
- console.log('I will get printed first');
- const asyncFunction = async () => {
- await setTimeout(()=> {}, 1000)
- console.log('I will get printed third');
- return 'hello'
- }
- (async () => {
- const result = await asyncFunction();
- console.log(`I will get printed last with result: ${result}`);
- })();
- console.log('I will get printed second');
复制代码
console.log 语句将在执行前等待它完成执行。
|