2

JavaScript を使用して一連の SQLite クエリを実行したいと考えています。これらのクエリは、いくつかのテーブルの最新の更新タイムスタンプを取得します。例えば:

SELECT last_updated FROM students ORDER BY last_updated DESC LIMIT 1;

SELECT last_updated FROM docs ORDER BY last_updated DESC LIMIT 1;

SELECT last_updated FROM logs ORDER BY last_updated DESC LIMIT 1;

SELECT last_updated FROM requests ORDER BY last_updated DESC LIMIT 1;

次に、これらの last_updated タイムスタンプをサーバーに送信します。これを行う方法を考えるとき、私は次のようなものを使用します:

var message = {};
sql('QUERY 1',[],function(row){
    message.q1 = row.shift().shift(); // first row, first item
    sql('QUERY 2',[],function(row){
        message.q2 = row.shift().shift();
        sql('QUERY 3',[],function(row){
            message.q3 = row.shift().shift();
            sql('QUERY 4',[],function(row){
                message.q4 = row.shift().shift();
                $.ajax('submit.php',{ // tell the server these things.
                    data: message,
                    type: 'POST',
                    success: function(response) {
                        console.log('Server replied: '+response+'\n');
                    },
                    error: function() {
                        console.log('HUHU.\n');
                    }
                }
            });
        });
    });
});

これは機能しますが、ネストされた SQL 呼び出しのため、これは非常に非効率的です。10 個の異なるテーブルのデータが必要になる場合もあります。

これを行うより効率的な方法はありますか?

4

2 に答える 2

0

このようなネストされた構造には、stepのようなものを使用できます。

次のような構文を使用できます。

Step(
  function readSelf() {
    fs.readFile(__filename, this);
  },
  function capitalize(err, text) {
    if (err) throw err;
    return text.toUpperCase();
  },
  function showIt(err, newText) {
    if (err) throw err;
    console.log(newText);
  }
);
于 2013-03-04T15:06:29.453 に答える
0

できることの 1 つは、呼び出しを「並行して」実行し、「バリア」パターンを使用して呼び出しがいつ完了したかを確認することです。

var calls_to_go = 4;
var callback = function(){
   calls_to_go -= 1;
   if(calls_to_go <= 0){
     do_ajax_stuff();
   }
}

sql('QUERY 1',[], callback);
sql('QUERY 2',[], callback);
sql('QUERY 3',[], callback);
sql('QUERY 4',[], callback);

もちろん、この特定のコードはアイデアを提供するためのものです。これらの非同期プログラミング ライブラリのいずれかを使用する場合は、この種のことをより快適に記述できるようにするための機能がすべて含まれている必要があります。それでも手作業で作業を行いたい場合は、物事がより整理されていることを確認する必要があります。ハードコードされていないなど。

于 2013-03-04T15:07:06.743 に答える