gpt4 book ai didi

node.js - Node : Callback was already called

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:26 24 4
gpt4 key购买 nike

我知道这里有几个与此相关的重复问题。但是,我不知道如何解决这个问题。我的代码是这样的:

/**
* DEFINE
* @connection_kill
*/
apiRoutes.post('/balancer_connection_drop', function(req, res) {
/* BALANCER - connection kill */
async.auto({
decrypt_kill: function(callback, drop, user, stream) {
/* DROP - decrypt */
try {
/* DEFINE - drop */
var drop = JSON.parse(decrypt(Object.keys(req.body)[0], encryption));

/* DROP - user & stream */
callback(null, drop['drop'], drop['user'], drop['stream']);
} catch(s) {
/* CLOSE - connection */
res.end();
}
},
remove_connection: ['decrypt_kill', function(results, callback) {
/* DROP - balancer || user & stream */
if ((results[Object.keys(results)[0]])[0] !== 'null') {
/* DROP - balancer users */
if (results[Object.keys(results)[0]][0] == 'balancer') {
console.log('callback users...');
/* DROP - balancer users */
pool.query('UPDATE live SET remove=?',[1], function(err, results) {
/* DROP - failed */
if (err) return callback('Could NOT Drop Users From Live Table!');
})
} else {
console.log('callback user...');
/* DROP - balancer user */
pool.query('UPDATE live SET remove=? WHERE user=? AND stream=?',[1, results[Object.keys(results)[0]][1], results[Object.keys(results)[0]][2]], function(err, results) {
/* DROP - failed */
if (err) return callback('Could NOT Drop Users From Live Table!');
})
}
} else {
console.log('failed to kill data empty...');
return callback('Balancer Connection Kill Data Empty!');
}
console.log('callback...');
callback();
}]
}, function(err, results) {
/* CHECK - error */
if (err) return res.send(encrypt(JSON.stringify({'status': 'false'}), encryption));
/* DROP - success */
res.send(encrypt(JSON.stringify({'status': 'true'}), encryption));
/* END - connection */
res.end();
})
})

现在,当我调用此 api C 时,会从 Node 收到此错误:

Callback was already called

因此,我放入代码 console.log 来查看两次调用的内容,并在抛出两次调用的错误之前从 console.log 中获取此信息:

callback user...
callback...

所以我发现我犯了一个错误,我调用了它两次,但我不知道如何重写上面的代码以使其在调用回调 user... 时正常工作。我需要去

function(err, results) {

函数并在该函数中将 json 返回到我的服务器 api,但我不知道如何重写它。我尝试使用上面的代码将回调移到函数之外,但回调永远不会被调用。

最佳答案

  • 在 pool.query 中处理错误后进行回调

  • 问题在于pool.query是异步任务, Node 跳转将异步任务推送到 libuv 后

  • 在 pool.query 回调函数之前到达最后一个回调();

  • 在代码到达后调用最后一个回调pool.query回调函数

    apiRoutes.post('/balancer_connection_drop', function(req, res) {

/* BALANCER - connection kill */
async.auto({
decrypt_kill: function(callback, drop, user, stream) {
/* DROP - decrypt */
try {
/* DEFINE - drop */
var drop = JSON.parse(decrypt(Object.keys(req.body)[0], encryption));

/* DROP - user & stream */
callback(null, drop['drop'], drop['user'], drop['stream']);
} catch(s) {
/* CLOSE - connection */
res.end();
}
},
remove_connection: ['decrypt_kill', function(results, callback) {
/* DROP - balancer || user & stream */
if ((results[Object.keys(results)[0]])[0] !== 'null') {
/* DROP - balancer users */
if (results[Object.keys(results)[0]][0] == 'balancer') {
console.log('callback users...');
/* DROP - balancer users */
pool.query('UPDATE live SET remove=?',[1], function(err, results) {
/* DROP - failed */
if (err){ return callback('Could NOT Drop Users From Live Table!');}

return callback();
})
} else {
console.log('callback user...');
/* DROP - balancer user */
pool.query('UPDATE live SET remove=? WHERE user=? AND stream=?',[1, results[Object.keys(results)[0]][1], results[Object.keys(results)[0]][2]], function(err, results) {
/* DROP - failed */
if (err){ return callback('Could NOT Drop Users From Live Table!');}

return callback();
})
}
} else {
console.log('failed to kill data empty...');
return callback('Balancer Connection Kill Data Empty!');
}

}]
}, function(err, results) {
/* CHECK - error */
if (err) return res.send(encrypt(JSON.stringify({'status': 'false'}), encryption));
/* DROP - success */
res.send(encrypt(JSON.stringify({'status': 'true'}), encryption));
/* END - connection */
res.end();
})
})

关于node.js - Node : Callback was already called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49653149/

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