2017-12-19 5 views
0

私はSails JSの初心者です。私は複数の.query( "SELECT ...")を作成しようとします。私はそれがシーケンスを実行していないように見えるときに問題があります。私は私のスニペットコードを見て、私の問題を説明します:セイルJS - ネストされた.queryメソッドはシーケンスを実行しません

var isSuccess = true; 
for(var loc = 0 ; loc < decode.length ; loc++){ 
    Location.query('SELECT * FROM abc', function (err, res){ 
     if (err) { 
     isSuccess = false; 
     return res.json(200, { 
      data: { 

      }, 
      status: { 
      id: 0, 
      message: err.message 
      } 
     }); 
     } else { 
     var validate = res.rows; 
     sails.log(validate); 

     secondQuery.query('SELECT * FROM def', function (err, seconResult) { 
     if (err) { 
      isSuccess = false; 
      sails.log("Update is Success : "+isSuccess); 
      return res.json(200, { 
      data: { 

      }, 
      status: { 
       id: 0, 
       message: err.message 
      } 
      }); 
     } else { 


     } 
     }); 
     } 
    }); 

    if(isSuccess){ 
     return res.json(200, { 
     data: { 

     }, 
     status: { 
      id: 1, 
      message: "Successful", 
      isSuccess: isSuccess 
     } 
     }); 
    } 
    } 

私はPOSTメソッドを介してAPIを要求し、結果が:

コンソールノードJSサーバーの場合:

アップデートは成功です。偽 だから、それはそれは、要求が失敗していると郵便配達

ではなく、ポストマンに復帰状態= 0でなければならないことを意味ショー:

data: { 

     }, 
     status: { 
      id: 1, 
      message: "Successful", 
      isSuccess: true 
     } 

私の質問:

は、誰もがなぜ、どのようにそれをシーケンス処理を行うために説明するために私を助けることができる、「マルチスレッド」を好きではありませんか? (私の場合は、私は本当に複雑なクエリに直面するRAWクエリの原因を使用する必要があります)

ありがとう。

+0

for-loopでクエリを実行する必要がある場合は、常に「マルチスレッド」と感じるため、複雑さを回避することはできません。あなたはあなたの質問の性質についてより具体的になりますか?あなたは1つに結合したり、そうでない場合、すべてのコードが完了したときに実行するいくつかのコードをトリガする方法があるかもしれません。 – arbuthnott

+0

1つに結合?結合する方法をもっと説明できますか?ありがとうございました。 – Michael

+0

'SELECT * FROM abc'よりも具体的な例がありますか? – arbuthnott

答えて

1

forループは同期で、Location.query()の方法ではありません。 これを順番に実行したい場合は、Bluebird Promiseを使用する必要があります。

例(テストしていません):

const Bluebird = require('bluebird'); 

const promises = []; 
for(let loc = 0 ; loc < decode.length ; loc++) { 
    promises.push(Location.query('SELECT ...')); 
} 

Bluebird.each(promises, (result) => res.json(200, {/* your payload data */})) 
     .catch((err) => res.json(200, {/* your error data */})); 

NB:あなたがセイル・コントローラで使用するとき、あなたのコールバックでres変数を使用するときは注意してください。

+0

ネストされたループはどうですか?約束のネストループの例を挙げることができますか? – Michael

+0

@Michael使用する入れ子になったループの例を提供して、約束でコードを変更する方法を示すことができますか? – Martial

関連する問題