找回密码
 FreeOZ用户注册
12
返回列表 发新帖回复
楼主: black_zerg
打印 上一主题 下一主题

[IT技术] 在JavaScript中模拟Thread,解决callback hell. 代码已github

[复制链接]
31#
 楼主| 发表于 28-7-2015 08:28:19 来自手机 | 只看该作者
提示: 作者被禁止或删除, 无法发言
比如你 用 for 连续 hit  server三遍 我觉得好像不该有问题
回复  

使用道具 举报

32#
发表于 28-7-2015 15:16:55 | 只看该作者
本帖最后由 woodheadz 于 28-7-2015 15:20 编辑
这样的话,用来做event handler的时候,会有限制。有些东西,只能在跟event handler同一个tick里面运行,比如window.open, request full screen等。
这个问题不知道lz是怎么解决的

黑虫这个使用异常控制流程,当事件发出信号的时候他应该直接就在事件的tick里处理流程跳转了,所以应该不存在你担心的这个问题。(我只是扫了下代码,没仔细看,错了请纠正我)
他现在的这个设计上我觉得看起来有点问题的还是在并行上。多个异步动作实际上有时候是需要同时执行的,现在似乎反而不行了。不过这个问题也很简单,引入await就好。类似这样:
  1. var await = $.await();
  2. $(function(){
  3.     button.click = function(){
  4.         .....
  5.         await.resolve();
  6.     }
  7. });
  8. await.wait();
复制代码


这样只要加几个await,并行的问题也就解决了。

黑虫这个idea其实比较类似step (https://github.com/creationix/step), 在step理念的基础上包装得更像同步代码。 但还是要求和step一样把逻辑放在callback里。

这个东西在实用的时候最大的问题我觉得还是在于重入控制上。这种形式的代码很像同步代码,使用者可能完全意识不到重入控制,而直接把不可重入的逻辑写在流程里,导致问题出现。这在稍微上点规模的team里会是个很致命的问题。
这个问题对于想要进入实用的框架/库还是挺重要的。我的knot.js到目前为止收获的最有价值的质疑就是CBS过高的自由度会不会导致用户放入过多逻辑,因此反而降低系统的可维护度。

评分

参与人数 2威望 +100 收起 理由
cais + 50 谢谢分享!
black_zerg + 50 谢谢分享!

查看全部评分

回复  

使用道具 举报

33#
 楼主| 发表于 28-7-2015 16:31:29 来自手机 | 只看该作者
提示: 作者被禁止或删除, 无法发言
是的woodheadz说得很对 我这个就不会支持'线程'中并行 因为不符合逻辑 从逻辑上说 可以看作所有的异步操作都变堵塞式 就是典型的 thread风格 如果要并行就再开 thread
回复  

使用道具 举报

34#
 楼主| 发表于 28-7-2015 16:33:57 来自手机 | 只看该作者
提示: 作者被禁止或删除, 无法发言
本帖最后由 black_zerg 于 28-7-2015 17:00 编辑

另外 woodheadz说的很对 使用者如果不遵守规则就一点办法没有 因为没办法检查 那就让他自己测试 跑的不对自然有问题 文档上我得写清楚 例子也搞好些.

这个库的设计思想最重要的就是简单,一复杂就没意思了。尽量让使用者看起来很直观。
回复  

使用道具 举报

35#
 楼主| 发表于 28-7-2015 18:03:51 | 只看该作者
提示: 作者被禁止或删除, 无法发言
更新例子! 展示 for loop 和goto等功能 请大家多提意见

http://shen.apphb.com/jt/demo/core.html
回复  

使用道具 举报

36#
 楼主| 发表于 28-7-2015 21:16:05 | 只看该作者
提示: 作者被禁止或删除, 无法发言
实现完了goto又觉得好像完全可以用while来替代,但总之是个选择吧。另外我上面发的例子实际上是可以修改然后再执行的,就类似Playground
回复  

使用道具 举报

37#
 楼主| 发表于 30-7-2015 10:10:44 来自手机 | 只看该作者
提示: 作者被禁止或删除, 无法发言
真是天才的设计啊 如此简单优雅的解决了问题
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 7-5-2024 16:12 , Processed in 0.018209 second(s), 23 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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