knexjs为什么mysql在插入后不立即返回正确的记录

时间:2017-08-27 07:36:07

标签: node.js async.js knex.js

我在MySQL中插入knexjs的记录,但在它立即返回旧记录后选择。为什么?当我将timeout()设置为insert和select函数之间的延迟时,会返回正确的记录!

function(cb) { //callUser plan
    sd = moment(new Date()).format("YYYY-MM-DD HH:mm:ss");
    ed = moment(new Date()).add(31, 'days').format("YYYY-MM-DD HH:mm:ss");
    space = planDetail.space * 1024 * 1024 * 1024;
    knex('user_plan')
        .insert({
            'username': userDetail.username,
            'plan_id': planDetail.id,
            'created': knex.raw('NOW()'),
            'start_date': sd,
            'end_date': ed,
            'transaction_id': tran.id,
            'space': space,
            'slot': planDetail.slot
        })
        .asCallback(cb);
},
function(res, cb) {
    logger.log(res);
    return cb(null);
},
function(cb) {
    knex.select('*').from('user_plan').where({
        username: self.username,
    })
    .andWhere('start_date', '<', knex.raw('NOW()'))
    .andWhere('end_date', '>', knex.raw('NOW()'))
    .orderBy('id', 'desc')
    .asCallback(function(err, rows) {
        if(err) return cb(err);

        logger.log(rows);
    });
},

1 个答案:

答案 0 :(得分:0)

您是否有远程连接到您的数据库?

在这种情况下,您的客户端时钟和服务器时钟可能会有点不同。从代码中我可以看到您在客户端使用sd创建插入的edmoment(),然后将所选行与数据库服务器时间NOW()进行比较。

您也可以通过获取所有行或最后插入的行(不比较日期)来调试它,并且看到插入后直接从DB中找到刚刚插入的行。