我正在嘗試撰寫 Node.JS MySQL 應用程式,但遇到了異步問題。盡管我可以在回傳結果之前立即對結果進行控制臺記錄,但它在前端 (index.js) 上顯示為“未定義”。我在這里做錯了什么,我該如何改變呢?
連接.js
const mysql = require('mysql2');
const db = mysql.createConnection(
{
host: 'localhost',
user: 'root',
password: 'Password1',
database: 'employee'
},
);
module.exports = db;
index.js
const inquirer = require('inquirer');
const db = require('./db/connections');
const cTable = require('console.table');
const { getDepartments, addDepartment } = require('./utils/departmentFunctions');
let endProgram = false;
const mainMenuQuestions = [
{
type: 'list',
name: 'next',
message: '? What would you like to do?',
choices: ['View All Employees', 'Add Employee', 'Update Employee Role', 'View All Roles', 'Add Role', 'View All Departments', 'Add Department', 'Quit', ]
}
];
const promptUser = () => {
return inquirer.prompt(mainMenuQuestions);
}
async function startApp() {
let isFinished = false;
while(!isFinished) {
let next = await promptUser();
if(next.next === 'View All Departments') {
console.log(``);
await console.log(getDepartments());
console.log(``);
} else if(next.next === 'Add Department') {
addDepartment();
} else if(next.next === 'View All Employees') {
}else if(next.next === 'Add Employee') {
} else if(next.next === 'Update Employee Role') {
} else if(next.next === 'View All Roles') {
} else if(next.next === 'Add Role') {
} else {
isFinished = true;
}
}
}
startApp();
部門函式.js
const db = require('../db/connections');
const inquirer = require('inquirer');
const cTable = require('console.table');
getDepartments = () => {
db.query(`SELECT * FROM departments`, function(err, results, fields) {
console.log(results);
return results;
});
};
module.exports = {
getDepartments
};
uj5u.com熱心網友回復:
在index.js
你有這個:
await console.log(getDepartments());
但這console.log
破壞了預期的效果await
:
console.log
同步執行(它不等待getDepartments()
承諾解決),并輸出一個待處理的承諾物件。console.log
本身回傳undefined
,await
并將解釋這是一個已解決的承諾,并undefined
作為履行價值。結果,執行將在下一個滴答中恢復并恢復,而您真正想要等待的承諾仍處于未決狀態。
要糾正這個問題,請將console.log
代碼的異步部分放入(即在 getDepartments()
解決后):
const departments = await getDepartments();
console.log(departments);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/508496.html
標籤:javascript 节点.js 异步 异步等待 mysql2