『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 662|回复: 6

[流程系列] NR上global store变量JS语法请教

[复制链接]

16

主题

103

帖子

617

积分

高级会员

Rank: 4

积分
617
金钱
514
HASS币
0
发表于 2023-10-21 14:55:02 | 显示全部楼层 |阅读模式
本帖最后由 samsss 于 2023-10-21 15:24 编辑

新手一枚,想咨询一下各位大佬下面的JS语法应该怎么写呢:
1)给global store变量多对象赋值是这些写:
global.set('actime',{'cf':1,'etf':2},"store");

结果如图1:

但如果下一次流程赋值:
global.set('actime',{'sf':1},"store");
就不会自动往下加'sf'的对象了,直接覆盖上次的值(如下图2);

我想实现的是能自动往下加'sf'的对象和值,应该怎么写呢?
2)针对图1的变量,
我想动态取某对象的值,但JS这样写:global.set('actime','cf',"store")
就报callback must be a function的错误了,
求指教怎么写?


1.png
2.png
回复

使用道具 举报

23

主题

632

帖子

4358

积分

元老级技术达人

积分
4358
金钱
3711
HASS币
30

教程狂人

QQ
发表于 2023-10-21 16:46:57 | 显示全部楼层
本帖最后由 alei643 于 2023-10-21 16:57 编辑

1、先把全局变量的值放到临时变量中,增加临时变量的对象之后,再回传给全局变量,参考下面示例
var a, b;
global.set('actime', { 'cf': 1, 'etf': 2 }, "store");
a = global.get('actime', a);
a.sf = 1;
global.set('actime', a);
b = global.get('actime', b);
msg.payload = b;
return msg;


2、获取全局变量的值是用global.get,比如var actime = global.get('actime', actime),这样就可以获取到对象的值了
回复

使用道具 举报

16

主题

103

帖子

617

积分

高级会员

Rank: 4

积分
617
金钱
514
HASS币
0
 楼主| 发表于 2023-10-21 21:23:59 | 显示全部楼层
alei643 发表于 2023-10-21 16:46
1、先把全局变量的值放到临时变量中,增加临时变量的对象之后,再回传给全局变量,参考下面示例

2、获取全 ...

感谢大佬提供的临时变量思路哈,还有个疑问:
我想按前面节点传输过来的msg.topic(比如该值是cf),来动态取actime的子对象值,应该怎么写呢,
似乎直接这样写不行:
global.set('actime', a).msg.topic
回复

使用道具 举报

23

主题

632

帖子

4358

积分

元老级技术达人

积分
4358
金钱
3711
HASS币
30

教程狂人

QQ
发表于 2023-10-23 11:44:02 | 显示全部楼层
samsss 发表于 2023-10-21 21:23
感谢大佬提供的临时变量思路哈,还有个疑问:
我想按前面节点传输过来的msg.topic(比如该值是cf),来动 ...

没看明白,是要取全局变量actime的对象值,还是取msg.topic的对象值?
回复

使用道具 举报

16

主题

103

帖子

617

积分

高级会员

Rank: 4

积分
617
金钱
514
HASS币
0
 楼主| 发表于 2023-10-23 15:43:30 | 显示全部楼层
alei643 发表于 2023-10-23 11:44
没看明白,是要取全局变量actime的对象值,还是取msg.topic的对象值?

msg.topic是一个动态的变量,要取全局变量actime下某个对象(对象名称就是通过msg.topic获取的,比如值是cf)的值;
回复

使用道具 举报

23

主题

632

帖子

4358

积分

元老级技术达人

积分
4358
金钱
3711
HASS币
30

教程狂人

QQ
发表于 2023-10-24 11:39:48 | 显示全部楼层
本帖最后由 alei643 于 2023-10-24 11:43 编辑
samsss 发表于 2023-10-23 15:43
msg.topic是一个动态的变量,要取全局变量actime下某个对象(对象名称就是通过msg.topic获取的,比如值是 ...

假如msg.topic的值为cf,若取全局变量中cf对象值,参考下方示例
global.set('actime', { 'cf': 1, 'etf': 2 }, "store");
var a = global.get('actime', a);
msg.payload= a[msg.topic];
return msg;
回复

使用道具 举报

16

主题

103

帖子

617

积分

高级会员

Rank: 4

积分
617
金钱
514
HASS币
0
 楼主| 发表于 2023-10-24 14:35:44 | 显示全部楼层
alei643 发表于 2023-10-24 11:39
假如msg.topic的值为cf,若取全局变量中cf对象值,参考下方示例

就是这个,感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-7 09:13 , Processed in 1.622029 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表