订阅数据的深度列表

时间:2017-03-19 19:00:49

标签: javascript node.js deepstream.io

是否可以在深层使用列表订阅数据?似乎对数据的更改不会使subscribe()函数跳闸,只有类似addEntry()的内容才会影响列表订阅。

const   deepstream      = require('deepstream.io-client-js')            ;
const   util            = require('util')                               ;

const   client  = deepstream('localhost:6020').login();

var obj_1       =       { 'sequelizeName':'Mark', 'sequelizeAddr':'123 Elm Lane'    , 'sequelizeId':'1111'};
var obj_2       =       { 'sequelizeName':'Lori', 'sequelizeAddr':'948 Maple Street'    , 'sequelizeId':'2222'};

const rec_1     = client.record.getRecord('obj_one');
const rec_2     = client.record.getRecord('obj_two');

rec_1.set(obj_1);
rec_2.set(obj_2);

var listTest    =       client.record.getList('listTest');

listTest.setEntries(    ['obj_one' ,'obj_two' ] );

listTest.subscribe( (result) => {
        console.log('LIST SUBSCRIBE: ' + util.inspect(result));
})

setTimeout( () =>       {
        obj_1.sequelizeAddr = '321 New Address';
        rec_1.set(obj_1); // how can this change show up in the list subscribe?
}, 2000 );

我被鼓励尝试使用列表的新方法,但我不清楚如何使用列表订阅数据本身的更改,除了以某种方式具有某种“通用”或“全局”订阅,我我不确定是否可能。

或者有什么方法可以使用匿名记录订阅?

2 个答案:

答案 0 :(得分:1)

列表只是字符串数组。您的列表内容未连接到实际记录。您甚至不能假设列表条目是记录名称。您需要手动订阅列表中的每个记录名称以获取其内容更新。

答案 1 :(得分:0)

这个建议是由沃尔夫拉姆和菲利普所做的:

class User{
    constructor( recordName ) {
        this.record = ds.record.getRecord( recordName );
        this.record.subscribe( this._processUpdate.bind( this ) );
    }

    _processUpdate( data ) {
        if( this.record.name === '...') {
            // do stuff
        }
    }
}

这很有效。谢谢你们两个。