1

ローカル DB (WebOs デバイス上) へのクエリを処理する JavaScript クラスがあります。ここでやりたいことは、すべての基本的なクエリを含むモデルを作成して、コードを簡素化することです。

最初に関数を作成します。

getLists: function(){
          this.query( 'SELECT * FROM lists ORDER BY rowID DESC', { 
                onSuccess:  enyo.bind(this,function(data) { this.getData(data); } ), 
                onError: function() { return false; } } );
   }

そして、データを受け取るコールバック関数があります:

getData: function(data){
       return data;
   }

今私がやりたいことは、私のアプリから次のように呼び出すことです:

var data = getLists();

問題は、コールバック関数 (getData) からデータが返されないことです。私の質問は、「getLists」がコールバックからデータを返すようにするにはどうすればよいですか?

ありがとうございました

4

2 に答える 2

2

あなたはインペリアルを考えています: C は B に続き、A に続きます。それを忘れてください。

AJAX と最新の JavaScript の動作は異なります。「今すぐデータを取得する」とは決して言わず、「データが利用可能になったら X を呼び出す」と言います。

したがって、解決策は、データに対して何か役立つコードを書くことです。この関数を と呼びましょうa。それ以外の:

var data = conn.getData();
a( data );
b( data );
c( data );

あなたがやる

conn.getData( a ); // a has to call b which calls c.

最終的に、データはそこにあり、引数としてa呼び出されます。data

見る?従来のプログラミングのようにa()andへの呼び出しを連鎖させません。b()代わりに、必要なことを行う関数を作成し、それらの関数を渡します。

于 2011-08-18T15:22:07.787 に答える
1

届かない。AJAX の最初の A は非同期です。リクエストは、他の処理で「時間外」に発生します。への呼び出しgetListsは、AJAX 要求を起動した後に戻り、リモート サーバーが AJAX 要求に応答するときにコールバック関数が呼び出されます。

-- コメント用に編集 --

変数を「監視」したい場合は、次のようなものを使用できます。

// Set up a container for the data to return to.
var retData;

// Modify the getData function to assign to the global variable
getData: function (data) {
  retData = data;
}

// Start the "wait" process.
var myInterval = setInterval(function () {
  if (retData == undefined) {
    return;
  }

  // when the return data shows up stop waiting.
  clearInterval(myInterval);

  // some other data processing here in this function
  // or trigger the actual processing function.
  // don't have to pass retData to it, it's global, the 
  // data handler function can retrieve it itself.
  myDataHandler();
}, 1000);

// make the ajax call here.
getLists();
于 2011-08-18T15:08:10.223 に答える