怎么能把 js 的异步流程写得像同步.

2014-10-27 21:04:14 +08:00
 ChanneW
看到这里有一篇文章 http://huangj.in/765 ,也想实现这样的效果. 但是我不做 nodejs , 我用在纯粹的浏览器里,有没有类似的方法.
3614 次点击
所在节点    问与答
19 条回复
chemzqm
2014-10-27 21:09:24 +08:00
chrome可以手工开启generator,要兼容的话 promise 凑合用吧
walkingway
2014-10-27 21:10:42 +08:00


今天下午看到的
ffffwh
2014-10-27 21:19:46 +08:00
first-class continuation?
ttph1oc
2014-10-27 21:23:06 +08:00
听说Q是很好的,不过我也没有真的试过。
jybox
2014-10-27 21:51:53 +08:00
快上 Coffee 贼船
ChanneW
2014-10-27 22:06:38 +08:00
$.when(
$.ajax( "/main.php" ),
).then( successFunc(){
$.when(
$.ajax( "/333.php" ),
).then( Func2(){
});
});


感觉 jquery 的 when - then 就是把回调函数拿到面前来了, 最终我还是会写成一大堆的嵌套, 何解?
Mutoo
2014-10-27 22:12:24 +08:00
async.js 就挺好用。
egen
2014-10-27 22:34:33 +08:00
wind.js
NathanInMac
2014-10-27 22:52:30 +08:00
async.js +1

不过没有啥完美的方案,js就这屌样
walkingway
2014-10-27 23:01:57 +08:00
aisk
2014-10-27 23:03:52 +08:00
promise
imskull
2014-10-27 23:18:49 +08:00
一直用Q挺爽。
luin
2014-10-28 01:17:35 +08:00
@walkingway 多谢推荐!

好巧,我这两天刚写了一个解决 JavaScript 异步的方案,是通过语法分析 + generator 实现的。可以在开发时彻底不用关心异步问题,用起来很简单,也不用 async.js 这样的异步流程控制类库。

GitHub 上有个比较直观好懂的示例:
https://github.com/luin/teascript

再举个常见的例子是:

User.findById(15, function(err, user) {
if (user) {
user.getProjects(function(err, projects) {
res.json({ user: user, projects: projects });
});
} else {
res.status(404).json({ error: 'not found' });
}
});

可以用 TeaScript 改成:

var user = User.findById(15, ~);
if (user) {
res.json({ user: user, projects: user.getProjects(~) });
} else {
res.status(404).json({ error: 'not found' });
}

目前这个项目还比较阳春,我还在抓紧完善。准备在我的下个项目中用上它,请大家多多提意见提交代码和 Star ^^

---

因为 TeaScript 用了 generator,所以目前来看只能在 Node 上用。如果楼主是前端的话,还是用 Promise 和 async.js 比较好,重一点的 IcedCoffeeScript 也可以,不过不用 generator 的话确实很难有完美的方案。
gangsta
2014-10-28 01:37:55 +08:00
publish-subscribe pattern
Epsil0n9
2014-10-28 04:35:21 +08:00
@walkingway 请问这个客户端的名字,两个旋转的箭头设计很带感
zhyu
2014-10-28 08:39:22 +08:00
Q挺好的,后来遇到了bluebird,据说性能比Q好很多(
showhand
2014-10-28 08:46:01 +08:00
fibjs?
walkingway
2014-10-28 08:47:41 +08:00
@Epsil0n9 官方web呀,原生Retweet就是这样的
wanjun
2014-10-28 09:26:27 +08:00
国人开发的 fibjs,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/141929

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX