最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

节点:已经调用了回调

IT培训 admin 1浏览 0评论

节点:已经调用了回调

我知道这里有一些重复的问题。但是,我不知道如何解决这个问题。我的代码是这样的:

/**
 * 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时,从节点获取此错误:

已经调用了回调

所以我放入代码console.log来查看两次调用的内容,我从console.log中获取此内容,然后抛出两次调用的错误:

callback user...
callback...

所以我看到我错了,我称之为两次,但我不知道如何重写上面的代码,因为它应该是这样,当调用回调用户...时。我需要去

function(err, results) {

函数和函数返回json到我的服务器api,但我不知道如何重写它。我尝试使用上面的代码在函数外部移动回调,但从不调用回调。

回答如下:
  • 在pool.query中处理错误后进行回调
  • 问题是pool.query是异步任务,并且在将其推送到libuv后,节点会跳过该异步任务
  • 它在pool.query回调函数之前到达最后一个callback();
  • 在您的代码到达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 - 连接* / res.end(); })})

节点:已经调用了回调

我知道这里有一些重复的问题。但是,我不知道如何解决这个问题。我的代码是这样的:

/**
 * 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时,从节点获取此错误:

已经调用了回调

所以我放入代码console.log来查看两次调用的内容,我从console.log中获取此内容,然后抛出两次调用的错误:

callback user...
callback...

所以我看到我错了,我称之为两次,但我不知道如何重写上面的代码,因为它应该是这样,当调用回调用户...时。我需要去

function(err, results) {

函数和函数返回json到我的服务器api,但我不知道如何重写它。我尝试使用上面的代码在函数外部移动回调,但从不调用回调。

回答如下:
  • 在pool.query中处理错误后进行回调
  • 问题是pool.query是异步任务,并且在将其推送到libuv后,节点会跳过该异步任务
  • 它在pool.query回调函数之前到达最后一个callback();
  • 在您的代码到达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 - 连接* / res.end(); })})

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论