Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1692|回复: 0
打印 上一主题 下一主题

js经典异步协同问题

[复制链接]

257

主题

354

帖子

1677

积分

金牌会员

Rank: 6Rank: 6

积分
1677
跳转到指定楼层
楼主
发表于 2016-3-30 01:01:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
or循环调用了异步程序,需要等待循环结束继续执行,如何确定异步事件全部结束?
我现在想到的办法是记下循环的次数,每当异步程序结束时,计数减一,当等于零的时候执行后面的程序,但是感觉这样写的代码好丑,有没有更好的办法?


不觉得使用计数器有任何丑陋之处 可以参考jquery的when 这个方法就使用了计数器来监控并发异步任务的结束时刻

对于串行执行的异步任务 可以使用队列或者promise的高级实现版本 参见jquery queue模块 jquery deferred模块的pipe方法和深入浅出nodejs的第四章提到的可以返回promise对象的then方法

可以用Promise.all()

1. Continuation-passing style
2. js 是动态类型语言,所以你可以方便的把临时状态绑定到作用域所能够访问的任意对象上


你这问题是js经典的异步协同问题。
你用的是计数器方法。
目前通用的解决方法是promise和generator。
可以查下相关资料。
另,朴灵的深入浅出nodejs里有个章节也讲到这个。
async 或是 eventproxy


计数器可以是可以,但是不太fool proof (例如 error了或是中间crash了怎么办?还得做处理)
用上面提到的promise或是(个人偏好)async caolan/async · GitHub
都是好很多的作法

你的情况就可以用类似下面这种来做control flowasync.each(array, do(callback){  // do something and callback when finished/error},function(){  // handle error or do something when all finished});



回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-5-5 02:32 , Processed in 0.054951 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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