羽毛如何在钩子中回滚?

时间:2018-01-03 14:59:40

标签: mongoose feathersjs

有人可以请提供一个使用feathersjs和mongoose进行回滚操作的示例。从钩子? 谢谢

//hook befor 
hook.app.service('service1').update(data).then(data1Save =>
{
hook.app.service('service2').update(data2).catch(err=>{
// TODO rollback service1
});
});

2 个答案:

答案 0 :(得分:0)

featherjs中没有回滚,该构造依赖于数据提供者,并且最有可能需要手动集成。

我通常做的是在边缘组件上执行更新,然后在边缘项存在后更新相关组件。

如果您在依赖项目中保留边缘项目列表,则可以在之后执行清理以确保更新进入。

//示例

app.service('transaction').create({...transactionInfo}).then(createdTransaction => {
  app.service('account').update(accountId,
    {
      $addToSet:{
        transactions:[createdTransaction._id] // add id to the parent
      },
      $set:{
        // nonTransactionsListdata
      }
    }
  ).then(updatedAccount => {
    // All updates should be successful
    // you can check to see if they took effect and resolve accordingly
  }).catch( err => {
    //Something happened, and may require a retry.
    // check validity of createdTransaction to ensure its being used correctly
  });
}).catch(err => {
  // Issue creating the transaction in the first place
});

答案 1 :(得分:0)

谢谢你的例子:

我的rollaback解决方案(挂钩标志):

  after: {
    all: []
    create: [myCreateHook({
      // create transaction
    service:'transaction',
    data:transactionInfo,
      // update transaction
    }),myAddArrayHook({
    path:'transactions.createdTransaction',
    service:'account',
   error:hook.isTransactionCatched})],   
  }

我希望找到一个羽毛系统:(。

再次感谢。