链接水线呼叫与Promises

时间:2014-10-18 09:23:01

标签: orm promise sails.js q waterline

在过去的3天里,我一直在我的头上撞墙。

我正在使用sailsjs&捆绑的水线ORM。我想一个接一个地运行数据库调用。我知道我可以通过嵌套在"然后"电话,但它看起来不对。

我已经多次查看了Q文档和教程,但我仍然没有知道如何连接和解雇#34;然后"从现有的Promise顺序调用:(

我想:

  1. 创建用户
  2. 制作动作
  3. 链接用户&动作
  4. 更新用户
  5. 更新操作
  6. 我的代码看起来像

     var mail = 'test@test.com';
    
     Users.create({email:mail, name:''}).then(console.log).fail(console.log);
    
     Actions.create({actionID:123})
     .then(function(error, action){
            Users.findOneByEmail(mail).then(function(person){
                person.actions.add(action.id);
                person.save(console.log);
            }).fail(console.log)  
         });
    
     Users.update({email:mail},{name:'Brian'}).exec(console.log);
     Actions.update({actionID:123},{now:'running'}).exec(console.log);
    

    从代码中可以看出,我一直在使用exec& amp;那么:P

    我认为方法是连接 Users.create(...)。然后 - > Action.create(...)。then - > Users.findOneByEmail(...)。然后 - > *和更新。

    非常感谢来自任何帮助

1 个答案:

答案 0 :(得分:13)

经过一天的研究后。我想我已经破解了它。

注意:我工作的第一个版本有"然后" s排队(删除厄运金字塔)返回创建。这允许我在下一行调用然后激活创建。 http://documentup.com/kriskowal/q/#tutorial/chaining

这是我的最终版本

var mail = 'test@test.com';    

Users.Create({email:mail,name:''})
  .then(function(user){
    return [Actions.create({actionID:123}),user];
  }).spread(function(action, user){

     user.action.add(action.id);
     user.name = 'Brian';
     user.save();

     action.now = 'running';
     action.save();
  }).catch(console.error);

其中一个很酷的事情就是"传播"这可以让你排队"承诺"和"价值观"返回一个他们都完成了下一个"然后"。