我在获取回调函数的结果时遇到问题。下面是我正在调用的异步函数
const utils = {
sendQuery: async function(query){
// Receives a query and returns raw results
// Query is using default database specified by pool
// Returns a Promise
let conn;
try {
conn = await pool.getConnection();
let queryString = query;
let rows = await conn.query(queryString);
let results = (this.formatResults(rows));
console.log(results);
return results;
} catch(err) {
throw new Error(err);
} finally {
if (conn) return conn.end();
}
}
module.exports = {
'utils': utils
}
上面的控制台日志返回预期结果。
及以下是调用以上功能的功能
const db = require('../private/db');
db.utils.sendQuery(queryString).then(function(result){
console.log(result);
}).catch(err=>{
throw res.render('error', {'error': err.stack});
})
上面的控制台日志返回未定义,我不知道为什么。
答案 0 :(得分:1)
真正的问题是这部分import tkinter as tk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.title("Math")
self.geometry('350x200')
self.label1 = tk.Label(self, text=' ')
self.label1.grid(column=2, row=0)
tk.Button(self, text="Function1", command=self.clicked).grid(column=1, row=0)
def clicked(self):
self.label1['text'] = self.fct1()
def fct1(self):
u = 0.1
while 1 + u != 1:
u /= 10
return u * 10
App().mainloop()
。
无论何时使用if (conn) return conn.end();
,它都会覆盖在上述{{1}中发生的任何先前的finally
,return
,break
或continue
}}或throw
块。
要解决您的问题,您应该这样做:
try
希望它能起作用
答案 1 :(得分:0)
我认为,只需返回results
而不是resolve(results)
。您的函数已经异步,并且此处未创建任何Promise对象。
然后只抛出err
而不是reject(err);
由于您返回了try
,因此不需要finally
语句。
答案 2 :(得分:0)
您只需要返回结果即可,而不是调用resolve
const utils = {
sendQuery: async function(query){
// Receives a query and returns raw results
// Query is using default database specified by pool
// Returns a Promise
let conn;
try {
conn = await pool.getConnection();
let queryString = query;
let rows = await conn.query(queryString);
let results = (this.formatResults(rows));
console.log(results);
return results;
} catch(err) {
throw new Error(err)
} finally {
if (conn) return conn.end();
}
}
module.exports = {
'utils': utils
}
答案 3 :(得分:0)
您可以简单地返回,或者我想这就是您想要做的事情
sendQuery: (query) => {
let promise = new Promise(async (resolve, reject) => {
let conn;
try {
conn = await pool.getConnection();
let queryString = query;
let rows = await conn.query(queryString);
let results = (this.formatResults(rows));
console.log(results);
resolve(results);
} catch (err) {
reject(err);
} finally {
if (conn) {
conn.end();
}
}
})
return promise;
}