我正在尝试在回调函数范围之外检索MySQL结果,但无法在其范围之外获取回调函数的结果。
我正在使用npm pdfkit
:
function generateExamDetails(doc) {
const query = "SELECT rc_name, rc_empid, DATE_FORMAT(CURDATE(), '%M %d %Y') AS t_date FROM table1 WHERE pc_id = ?"
console.log("query: ", query, " data: ", pcIDdata)
const getDataQuery = (pcid) =>{
return new Promise((resolve, reject) =>{
connection.query(query, pcid, (error, result) => {
if (error) {
reject(error)
}
console.log("Audit Report1 ", util.inspect(result, false, null, true /* enable colors */))
resolve(result);
})
})
}
var outerheaderResult;
getDataQuery(pcIDdata).then(headerResult =>{
outerheaderResult = headerResult;
}).catch((e) =>{
console.log('e: ',e)
})
console.log("Audit Report2 ", util.inspect(outerheaderResult, false, null, true /* enable colors */))
doc
.fontSize(12)
.text("Some text", 10, 80, { align: "left" })
.text("Some text", 300, 80, { align: "right" })
.text(`Verified by: ${outerheaderResult.rc_name}`, 10, 100, { align: "left" })
.text(`Emp id: ${outerheaderResult.rc_empid}`, 377, 100)
.text(`Verified on(date) ${outerheaderResult.t_date}`, 10, 120, { align: "left" })
.text("Organization:", 377, 120)
}
我有错误:
Audit Report2 undefined
TypeError: Cannot read property 'rc_name' of undefined
答案 0 :(得分:1)
您的getDataQuery
函数是异步的,因此outerheaderResult
在访问时将undefined
。
您可以将逻辑移到then
块中,而直接使用headerResult
:
getDataQuery(pcIDdata)
.then(headerResult => {
console.log("Audit Report2 ", util.inspect(headerResult, false, null, true /* enable colors */))
doc
.fontSize(12)
.text("Some text", 10, 80, { align: "left" })
.text("Some text", 300, 80, { align: "right" })
.text(`Verified by: ${headerResult.rc_name}`, 10, 100, { align: "left" })
.text(`Emp id: ${headerResult.rc_empid}`, 377, 100)
.text(`Verified on(date) ${headerResult.t_date}`, 10, 120, { align: "left" })
.text("Organization:", 377, 120)
})
.catch((e) => {
console.log('e: ',e)
})
答案 1 :(得分:0)
在您的代码段中,getDataQuery
将进入回调队列,并且函数的最后几行将在此时声明externalheaderResult且其值将为空
outerheaderResult
的值为空,因为getDataQuery
是异步函数。 (您可能不知道它会被解决还是被拒绝)
getDataQuery(pcIDdata).then(headerResult =>{
outerheaderResult = headerResult;
console.log("Audit Report2 ", util.inspect(outerheaderResult, false, null, true /* enable colors */))
doc
.fontSize(12)
.text("Some text", 10, 80, { align: "left" })
.text("Some text", 300, 80, { align: "right" })
.text(`Verified by: ${outerheaderResult.rc_name}`, 10, 100, { align: "left" })
.text(`Emp id: ${outerheaderResult.rc_empid}`, 377, 100)
.text(`Verified on(date) ${outerheaderResult.t_date}`, 10, 120, { align: "left" })
.text("Organization:", 377, 120)
}).catch((e) =>{
console.log('e: ',e)
})
那很好。