0

私は次の機能を持っています:

function query(db, querystr){

    var resultSet;

    db.transaction(function(tx){

        tx.executeSql(querystr, [], function(tx, results){


            console.log("ROWS ---> "+results.rows);

            resultSet = results.rows;

        }, dbError);

    }, dbError, dbSuccess);

    return resultSet;

}

呼び出し元に戻ることができるように、メイン関数で results.rows を取得するにはどうすればよいですか?

呼び出し元が次のようなことをするとします。 var result_rows = query(db, 'select 1 from dual');

result_rows が tx.executeSql ネスト関数から results.rows 値を取得するようにするにはどうすればよいですか? この例で行った方法では、呼び出し元が未定義になります。

ありがとう、TS

4

2 に答える 2

0

まず第一に、Barmar のコメントは正しいです。データが同じ Javascript スレッド/スタック/呼び出し元で返されることを実際に保証することはできないため、単に返すことはできません。

非同期的に取得されたアイテムで何かを行う最も一般的なパターンは、要求元の関数が onSuccess 関数を渡して呼び出し、結果のデータを引数として渡す必要があるというものです。この種のパターンは、UI スレッドがブロックされないため、パフォーマンスが大幅に向上します。

var pizza = getMeAPizza('pepperoni');
console.log('Yesss, got my pizza.');

//becomes...

getMeAPizza('pepperoni', function(pizza) {
  console.log('Yesss, got my pizza.');
}

あなたが言うようにJQueryプラグインを開発している場合、私が理解していることから、1つの一般的なパターンは、それを返すときに「Deferred」オブジェクト定義を実装することであり、呼び出し関数は次のアクションを連鎖させることができます。この部分は私にとっては中古の知識なので、わざわざ説明するつもりはありません...

于 2013-07-16T19:33:39.113 に答える