2016-10-10 47 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)

相關問題