2016-10-10 52 views
0

我不完全确定如何描述我的问题,这就是为什么这个问题的标题有点混乱。 这种情况是,如果在SailsJS控制器内部有一个操作,它应该在两个不同的查询的帮助下保存数据。我的问题是,如果第二个查询失败(因为两个查询的数据已连接),是否有一个不错的优雅方法来删除第一个条目?Sails JS两次查询第二次失败首先删除

我目前的做法是使用异步自动。如果有错误,我会检查一个查询是否成功并将其删除。但我不能停下来想一定有更好的办法。

布鲁诺

编辑 这里是我当前的代码:

async.auto([ 
     user: function(callback) { 
      User.create({ 
      mail: data.mail, 
      password: data.password, 
      device_id: data.device_id, 
      own_number: data.own_number 
      }).exec(callback); 
     }, 
     contact: function(callback) { 
      Contact.create({ 
      number: data.own_number, 
      number_id: util.hash(data.own_number), 
      soundlogo: null 
      }).exec(callback); 
     } 
     ], 
     function(error, results) { 
     // check for error 
     if(error){ 
      sails.log(error); 

      // Check whether one was successful and remove it 

      return res.json({errorMsg: error}); 
     } 
+0

你能粘贴你当前的代码,请问? – SkyQ

+0

根据您粘贴的代码,'user'和'contact'是独立的,'contact'中没有来自'user'的响应参数。所以你可以使用'async.auto'并首先在'contact'中创建条目,并在'user'表中创建条目的成功。 – khushalbokadey

回答

0

您可以使用简单的异步系列()

async.series([ 
    user: function(scb) { 
     User.create({ 
     mail: data.mail, 
     password: data.password, 
     device_id: data.device_id, 
     own_number: data.own_number 
     }).exec(function(err, user){ 

     if(user){ 
      scb(null, user); 
     } 
     else{ 
      return res.json({errorMsg: "failed to create user!"}); 
      // scb("failed to create user!"); 
     } 

     }); 
    }, 

    contact: function(scb) { 
     Contact.create({ 
     number: data.own_number, 
     number_id: util.hash(data.own_number), 
     soundlogo: null 
     }) 
     .exec(function(err, contact){ 

     if(user){ 
      scb(null, contact); 
     } 
     else{ 
      return res.json({errorMsg: "failed to create contact!"}); 
      // scb("failed to create contact!"); 
     } 

     }); 
    } 
], 

function(error, results) { 
    // check for error 
    if(error){ 
    sails.log(error); 

     // Check whether one was successful and remove it 
     return res.json({errorMsg: error}); 
    } 

}); 

您可以使用直接发送响应客户端或使用回拨(err)

相关问题