2016-10-10 6 views
0

私は自分の問題をどのように記述するのか正確には分からないので、この質問のタイトルはちょっと混乱します。 状況は、2つの異なるクエリの助けを借りてデータを保存するSailsJSコントローラの中にアクションがある場合です。私の質問は、2つ目のクエリが失敗した場合(2つのクエリのデータが接続されているため)、最初のエントリを削除するうまいエレガントな方法ですか?帆JS 2つのクエリが最初に削除されて失敗する

私の現在のアプローチは、async autoを使用することです。エラーがある場合は、1つのクエリが成功したかどうかを確認して削除します。しかし、私は良い方法がなければならないと考えることを止めることはできません。

ブルーノ

EDITここ は私の現在のコードです:

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

あなたの現在のコード、plsを貼り付けますか? – SkyQ

+0

貼り付けたコードによれば、 'user'と' contact'は独立していて、 'user'の応答パラメタのどれもが' contact'で使われていません。したがって、 '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}); 
    } 

}); 

あなたがクライアントに直接送信する応答のいずれかを使用することができますコールバックを使用する(エラー)

関連する問題