使用gundb时,枪支映射的console.log输出重复

jtl*_*sey 3 gun

此函数是否将结果重复为错误或是否导致此错误?输出始终有1个或多个重复的记录.在这个例子中,中国银行总是在输出中列出两次.

gun.get('savings_accounts').map(function (name, ID) {
  console.log( name.name, ID );
}, true)
Run Code Online (Sandbox Code Playgroud)

我的代码:

localStorage.clear();
var gun = Gun();

////////////////////////////////////////////////////// create record
var acc1 = gun.put({
    name: "Bank of America",
    accType: "Savings",
    last4: "4123",
    favorite: true,
    status: true,
    created: "some date created"
  });
var acc2 = gun.put({
    name: "Bank of China",
    accType: "Savings",
    last4: "5123",
    favorite: true,
    status: true,
    created: "some date created"
  });

gun.get('savings_accounts').map(function (name, ID) {
  console.log( name.name, ID );
}, true)
Run Code Online (Sandbox Code Playgroud)

jtl*_*sey 5

来自GunDB的作者Mark Nadal

1)gun.get('savings_accounts').map().val(cb)是你想要的正常/程序/简单的东西.然而...

2)枪实际上是功能/反应(FRP),或者也称为流/事件导向.数据可能/将被多次调用(如果你不使用.val),因为A)内存中的回复,B)浏览器的localStorage回复,C)服务器将回复,D)服务器将中继到其他浏览器对等体可能会回复数据.^这是枪的"实时"部分.

.val只发射一次(对于链条上的每个项目,所以如果你这样做map().val(cb),val将会多次触发,但只能从列表中的每个项目中触发一次).

使用.val(cb)如果你正在做的事情的程序.

如果要订阅数据的实时更新,请使用.on(cb) (.map(cb)内部使用.大多数API方法在内部使用.on).你会慢慢发现实时/ FRP /事件/流媒体是一种更清晰的方式来编写你的应用程序.