3

此功能是否将结果重复为错误还是我造成的?输出总是有 1 个或多个重复的记录。在这个例子中,中国银行总是在输出中列出两次。

gun.get('savings_accounts').map(function (name, ID) {
    console.log( name.name, ID );
}, true)

我的代码:

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)
4

1 回答 1

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/事件/流是一种更简洁的方式来编写你的应用程序。

于 2016-07-29T18:37:26.247 回答