搜索
查看: 1042|回复: 3

[入门教程] 使用publish/subscribe发布订阅消息

[复制链接]

170

主题

2505

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13758
发表于 2017-12-20 21:18:15 | 显示全部楼层 |阅读模式
先看例子,用起来非常简单:
import console;

//订阅消息
subscribe("关注的主题",function(...){
    console.log(
"关注的主题已发布",...)
} )

//发布消息
publish("关注的主题",1,2,3)

console.pause(
true);



确实太简单了,
你可能会想到,搞这么复杂,我直接写成一个函数不是更简单?! 例如:
import console;

//订阅消息
self["关注的主题"] = function(...){
    console.log(
"关注的主题已发布",...)
}

//发布消息
self["关注的主题"](1,2,3)

console.pause(
true);

事实并不是这样,publish / subscribe 的优势是:
1、不需要消耗和占用任何变量命名,与名字空间和作用域都无关,使用范围仅受线程限制,不受作用域的限制。
2、同一个消息名,可以绑定任意多个订阅函数。
你可以把publish / subscribe理解为单线程版本的 thread.command


回复

使用道具 举报

0

主题

4

帖子

47

积分

新手入门

Rank: 1

积分
47
发表于 2017-12-21 10:10:23 | 显示全部楼层
之前在多窗口之间传递消息用了这个  相当好用
回复

使用道具 举报

11

主题

51

帖子

387

积分

二级会员

Rank: 3Rank: 3

积分
387
发表于 2017-12-21 20:06:30 | 显示全部楼层
  1. import console;
  2. //订阅消息
  3. subscribe("关注的主题",function(...){
  4.     var args = {...}
  5.     var num = 0;
  6.     for(i=1;#args;1){
  7.             num+=args[ i ];
  8.     }   
  9.     return num;
  10. } )
  11. //发布消息
  12. console.log(publish("关注的主题",1,2,3))
  13. console.pause(true);
复制代码

有时执行一个功能需要处理并返回结果,publish可不可以支持返回值?
回复

使用道具 举报

170

主题

2505

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13758
 楼主| 发表于 2017-12-21 21:00:22 | 显示全部楼层
iaauto 发表于 2017-12-21 20:06
有时执行一个功能需要处理并返回结果,publish可不可以支持返回值?

发布、订阅”顾名思义是单向的推送数据。
有返回值那及不叫发布订阅了,result = publish() 这种代码你看着不觉得后背心发凉吗?!
多客户端谁来返回值呢?返回一个还是多个值呢?!返回值要不要中断发布呢?!这根本不是一个函数应该帮你全部解决的问题。

你需要的应当是普通的函数调用、或者迭代器之类的东西。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-7-17 21:55 , Processed in 0.078125 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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