chaining function 与 event 执行次序问题

2013-08-15 21:04:39 +08:00
 singwong
正在学node.js, 有frontend Javascript的底子, 但下面这个例子(用法)我在browser未遇过, 想请敎各高手:
app.post(‘/projects’, function (req, res, next) {
Project.build(req.body).save()
.success(function (obj) {
res.send(obj);
})
.error(next);
});

注:Project 是 node-sequelize 的model instance.

.save() 完后才用.success()和.error()加入event listener, 不会接收不到该两个event吗?
是node-sequelize的设计, 还是node.js 或Javascript 的设计?
3120 次点击
所在节点    Node.js
2 条回复
jkeylu
2013-08-15 22:18:48 +08:00
1. save() 里的是异步操作
2. 链式操作是顺序的,也就是 save() 返回后就执行 success() 然后 error()
3. save() 虽然执行了,但是并不是在 success 和 error 之前,应该会在 nextTick 或更后
4. 总之,在 save() 里的异步操作执行完后,emit "success" 或 "error" 信号前,success() 和 error() 已经执行了
5. 看代码 https://github.com/sequelize/sequelize/blob/master/lib/dialects/mysql/query.js#L26
6. 应该类似于

var jqxhr = $.post("example.php", function() {
alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });
singwong
2013-08-16 21:18:43 +08:00
@jkeylu 明白了, 原来是sequelize的设计,之后会多看source的了。
发了个感谢。

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

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

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

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

© 2021 V2EX