1

我有一个函数可以在数据库的主键列中插入一个随机数。

当号码已经在数据库中时我遇到问题我想再次调用该过程以更改号码并尝试再次插入但我是 Javascript 的新手所以这是我到目前为止提出的代码。

创建随机数的函数:

编辑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);
        });

这段代码没问题,但是当号码已经存在时,我不知道如何重复这个过程。

谁能告诉我如何解决这个问题?

4

3 回答 3

1

一种可能性是自动递增而不是随机数。这样会更舒服。

如果你真的想插入随机数,你应该创建一个unique indexon numero。调用您的查询后,您可以检查查询是否成功,如果没有,请检查是否是因为该号码已经存在。(检查 mysql 服务器返回的错误号。)如果失败,则创建一个新的随机数并再次调用您的函数以插入新的数字。

PS:目前,您的数据库中只能存储九行。

于 2012-07-20T22:16:28.713 回答
1

您实际上希望将回调函数传递给insertarNumero函数,如下所示:

function anotherInsert() {
    insertarNumero(crearNumero(), anotherInsert);
}

如果函数失败,这将导致insertarNumero函数重新调用此函数。请注意,您可能还应该检查错误代码,这样您就不会尝试多次插入,例如,如果出现连接错误。

编辑:鉴于您仍然难以解决您的问题,这里有两种可能对您有所帮助的选择:

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);
});
于 2012-07-20T22:21:08.443 回答
-1

只需再次调用自己并使用相同的回调传递arguments.callee

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

于 2012-07-20T22:16:35.790 回答