V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
singwong
V2EX  ›  Node.js

chaining function 与 event 执行次序问题

  •  
  •   singwong · 2013-08-15 21:04:39 +08:00 · 3302 次点击
    这是一个创建于 4121 天前的主题,其中的信息可能已经有所发展或是发生改变。
    正在学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 的设计?
    2 条回复    1970-01-01 08:00:00 +08:00
    jkeylu
        1
    jkeylu  
       2013-08-15 22:18:48 +08:00   ❤️ 1
    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
        2
    singwong  
    OP
       2013-08-16 21:18:43 +08:00
    @jkeylu 明白了, 原来是sequelize的设计,之后会多看source的了。
    发了个感谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6005 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 02:50 · PVG 10:50 · LAX 18:50 · JFK 21:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.