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