一个有关异步操作的问题,弄了一天,没明白。
发布于 8 年前 作者 klausgao 3246 次浏览 来自 问答

很简单的一个需求: 前端post一个对象过来,要保存进数据库,比如是{name:‘name1’, val:‘val2’}, 后端需要做2件事情,一是在主数据库保存这个obj,二是在备份数据库保存这个obj。 后端分2层,一个是逻辑层,一个是数据层,专门操作数据库的,逻辑层用RPC和数据层通讯。 逻辑层其实也是简单的发送那个obj过去,都很平常。 问题在数据层,我的数据层的主备数据库实际上是1份代码运行的2份实例(分配不同的port),而在只是在代码中做判断, 若这个实例是设置为备份数据库,则只写入备份数据库即可。 若这个实例是设置为主数据库的,则要在写入主数据库后,RPC发送obj给备份数据库,让它也写入备份数据库。

    co(function*() {
        let _promises = [];
        _promises.push(couponInsert(json));

        if (isMainServer) {
            let client = jayson.client.tcp({
                port: 5001
            });
            _promises.push(client.request('xix/adminCouponInsert', json));
        }
        let _count = yield _promises;
        cb(null, _count);
    }).catch(function (err) {
        console.log('backError:' + JSON.stringify(err));
        cb(null, null);
    });

然而,所有的备份数据库,接收到的obj都是null。 我试了各种方法,包括setTimeout、yield [], co-any,都是这样,现在整个人都晕了。

2 回复

后面发现,即使我_promises.push(client.request(‘xix/adminCouponInsert’, {a:1,b:1})); 再后来,解决了。。。 是那个库必须要限定字段的名称,不对的字段就直接null。。。蛋痛啊

结贴

回到顶部