我需要基于订阅的内存数据库,我可以在我的数据更改中进行回调(我只会将它用于我的测试)。我使用了gunDB,它只能这样工作:
var Gun = require('gun');
var key = 'something_long';
var state = { a: 1, b: 2 };
var gun1 = Gun();
var gun2 = Gun();
gun1.put(state).key(key);
gun2.get(key).on(function(val) {
console.log('Value for gun2 (using ".on") is: ');
console.dir(val);
});
当我交换gun1.put
和gun2.get
时,它无法正常工作。这意味着我不能真正订阅,直到密钥不在那里。这个例子不起作用(回调永远不会被调用):
var Gun = require('gun');
var key = 'something_long';
var state = { a: 1, b: 2 };
var gun1 = Gun();
var gun2 = Gun();
gun2.get(key).on(function(val) {
console.log('Value for gun2 (using ".on") is: ');
console.dir(val);
});
gun1.put(state).key(key);
我对所有可用的内存数据库都不太熟悉,如果有人可以提出建议,我会很感激。
同样的例子适用于firebase:
var Firebase = require('firebase');
var statesRef = new Firebase('https://******.firebaseio.com/states');
var statesRef2 = new Firebase('https://******.firebaseio.com/states');
var key = 'something_very_long';
var data = { a: 1, b: 2 };
statesRef2.on('value', function(dataSnapshot) {
console.dir(dataSnapshot.val());
});
statesRef.set({ key: key, state: data });
答案 0 :(得分:2)
创建单独/多个GUN实例并不是有用或必要的。
如果您只使用1个GUN实例,那么一切正常:
http://jsbin.com/yorujufofe/edit?js,console
它也适用于NodeJS。
返回给你的val
对象是一个安全复制的快照,改变它不会影响数据库状态。
我希望这有用。