gpt4 book ai didi

javascript - 回调调用本身

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:48 25 4
gpt4 key购买 nike

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

当号码已经在数据库中时,我遇到了问题,我想再次调用该流程来更改号码并尝试再次插入,但我是 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);
});

这段代码没问题,但是当数字已经存在时,我不知道如何重复处理。

任何人都可以告诉我如何解决这个问题吗?

最佳答案

您想要实际将回调函数传递给 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);
});

关于javascript - 回调调用本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11587576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com