回调不是函数节点js

时间:2016-03-23 20:58:07

标签: node.js asynchronous callback

我是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”,因此与数据库的连接有效。

2 个答案:

答案 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)

我建议如下:

&#13;
&#13;
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;
&#13;
&#13;

这样就可以强制执行回调始终是一个函数。如果你像Rol.getAllRoles()那样运行它,那么你以前会得到一个错误。现在你不会。你不会得到任何数据。

确保使用正确的参数调用Rol.getAllRoles(即:函数)。