我是javascript的新手,我无法解决此错误。我收到消息:“回调不是函数”:“return callback(rolesArray)”。
public void popUpWindow(JTable t)
{
JFrame frame=new JFrame();
DefaultTableModel dtm=new DefaultTableModel(data,columnNames);
t.setModel(dtm);
JButton btnEdit=new JButton("Edit");
JButton btnUpdate=new JButton("Update");
btnUpdate.setEnabled(false);
JButton btnDelete=new JButton("Delete");
btnEdit.setBounds(150, 220, 100, 25);
btnUpdate.setBounds(150, 260, 100, 25);
btnDelete.setBounds(150, 300, 100, 25);
JScrollPane jsp=new JScrollPane(t);
jsp.setBounds(0, 0, 880, 200);
frame.setLayout(null);
frame.add(jsp);
jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
frame.add(btnEdit);
frame.add(btnUpdate);
frame.add(btnDelete);
frame.setSize(900,400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
int row,column;
btnEdit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
t.setEnabled(true);
btnUpdate.setEnabled(true);
}
});
btnUpdate.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(t.isEditing())
{
row=t.getEditingRow();
column=t.getEditingColumn();
// System.out.println("row : "+row+" column : "+column);
Object s=dtm.getValueAt(row, column);
dtm.setValueAt(s, row, column);
dtm.fireTableCellUpdated(row,column);
// System.out.println(s);
}
}
});
}
console.log输出:“roles:admin,customer”,因此与数据库的连接有效。
答案 0 :(得分:6)
该错误表示您在调用时未将函数传递给Rol.getAllRoles(fn)
。
此外,为了使您可以在回调中进行适当的错误处理,以便更容易区分错误和实际数据,您应该始终将第一个参数传递给回调,指示是否存在错误或不是然后第二个参数(如果不是错误)可以是你的结果数组:
Rol.getAllRoles = function(callback){
sql = "select role from Role;";
var rolesArray = [];
var role;
mysql.connection(function(err,conn){
if (err){
return callback(err);
}
conn.query(sql,function(err,rows){
if (err){
return callback(err);
}
for(var i=0; i < rows.length; i++){
role = rows[i].role;
rolesArray.push(rol);
}
console.log("roles: " + rolesArray);
// make sure the first argument to the callback
// is an error value, null if no error
return callback(null, rolesArray);
});
});
}
然后你应该这样称呼它:
Rol.getAllRoles(function(err, rolesArray) {
if (err) {
// handle error here
} else {
// process rolesArray here
}
});
这种在callback(err, data)
中调用异步回调的方式是一种非常常见的异步回调设计模式。它允许所有呼叫者查看是否存在错误,以及是否没有错误可以访问最终结果。
答案 1 :(得分:0)
我建议如下:
class dataGen:
def epochTime(self):
epoch_time = int(time.time())
return epoch_time
def firstName(self):
firstName = 'Storm' + str(self.epochTime())
return firstName
def lastName(self):
lastName = 'Trooper' + str(self.epochTime())
return lastName
def main():
# Creates an object of dataGen class
t = dataGen()
print(t.firstName(), t.lastName())
if __name__ == '__main__':
main()
&#13;
这样就可以强制执行回调始终是一个函数。如果你像Rol.getAllRoles()那样运行它,那么你以前会得到一个错误。现在你不会。你不会得到任何数据。
确保使用正确的参数调用Rol.getAllRoles(即:函数)。