callback本身
我有一个函数,在主键的列中插入一个随机数字的数据库。
我有一个问题,当数字已经在数据库中,我想再次调用该过程来更改数字,并尝试再次插入,但我是一个JavaScript的新手,所以这里是我到目前为止的代码。
创build一个随机数的函数:
编辑2:
function crearNumero() { var aNumeros = new Array ( '1', '2', '3','4','5','6','7','8','9' ); var cNumero = aNumeros[Math.floor(Math.random()*aNumeros.length)]; return cNumero; }
插入数据库的函数:
function insertarNumero(Callback) { var sql='INSERT INTO tabla_numero(numero) VALUES(?)'; var params= [crearNumero()]; client.query(sql,params,function(err,rows) { if(err){ arguments.callee(Callback); } else { return Callback(params[0]); } }); }
所以我试着插入这个数字:
insertarNumero(function(args) { console.log('el numero ingresado fue '+args); console.log('the number inserted was '+args); });
这个代码是好的,但是当这个数字已经存在,我不知道如何重复de过程。
任何人都可以告诉我如何解决这个问题?
你想实际上将一个callback函数传递给insertarNumero
函数,如下所示:
function anotherInsert() { insertarNumero(crearNumero(), anotherInsert); }
这将导致insertarNumero
函数重新调用这个函数,如果失败。 build议您也应该检查错误代码,以便在出现连接错误时不要尝试插入多次。
编辑 :看到你仍然有困难解决你的问题,这里有两个可能会帮助你的select:
function insertarNumero(callback) { var sql = 'INSERT INTO tabla_numero(numero) VALUES(?)'; var params = [crearNumero()]; client.query(sql, params, function(err, rows) { if (err) { callback(err); } else { callback(); } }); } function insert() { insertarNumero(function(err) { if (err) { console.log('failed to insert'); insert(); } else { console.log('inserted'); } }); }
如果你真的不想要insert()
函数…
function insertarNumero(callback) { var sql = 'INSERT INTO tabla_numero(numero) VALUES(?)'; var params = [crearNumero()]; client.query(sql, params, function(err, rows) { if (!err) { if (callback) { callback(params[0]); } } else { //TODO: Check the error code insertarNumero(callback); } }); } insertarNumero(function(args) { console.log('the number inserted was ' + args); });
一种可能是自动增量而不是随机数。 这会更舒适。
如果你真的想插入随机数字,你应该在numero
上创build一个unique index
。 在调用你的查询之后,你可以检查查询是否成功,如果没有,检查是否是因为这个数字已经存在。 (检查mysql服务器返回的错误号。)如果失败,你创build一个新的随机数并再次调用你的函数来插入新的数字。
PS:目前,您只能在数据库中存储九行。
只需再次调用自己,并使用arguments.callee
传递相同的callback:
function insertarNumero(Callback) { var sql='INSERT INTO tabla_numero(numero) VALUES(?)'; var params= [crearNumero()]; client.query(sql,params,function(err,rows) { if(err){ arguments.callee(Callback); } else { return Callback(); } }); }
arguments.callee
与使用此函数的名称insertarNumero