当前的`map()`做什么?

时间:2018-01-04 19:39:11

标签: gun gundb

(Gun.version 0.9.6)

给出以下数据结构

{
    lights:{
        1:{
            state:{
                on:true,
                color:'red',
                br:254
            }
        },
        2:{
            state:{
                on:true,
                color:'red',
                br:254
            }
        },
        3:{
            state:{
                on:true,
                color:'red',
                br:254
            }
        }
    }
}    

我想同时打开/关闭灯。 gun.get('lights').val(cb)确实给了我{1:{...},2:{...},3:{...}}和gun.get('lights').path('1.state.on').put(false);完美无缺。

我认为,通过gun.get('lights').map().path('1.state.on').put(false),它会映射'在所有灯光上,但它只改变了第一盏灯。

问题:如何打开/关闭所有灯?

2 个答案:

答案 0 :(得分:0)

@ stef-de-vries,你在枪的源代码中发现了一个重要的TODO错误!

目前(v0.9.6),put不适用于map()命令。我认为它只选择第一项(可能是随机的),然后将其关闭。

这很糟糕,需要加以解决。

目前,解决方法可能是:

gun.get('lights').map().path('state.on').val(function(){
  this.put(false);
});

哪个很难看。

答案 1 :(得分:0)

嗯......好吧,但是如果我第二次运行它,gun.get('lights').map().val(cb)就失败了。

使用each()模块解决了我的问题

gun.get('lights').each(node=>{
          gun.get(node._['#']).path('state.on').put(true)
        })