2

全て、

私はWebOS enyoで働いていますが、本当に上級の瞬間があります....

基本的に、その縁代は私の質問とは関係ありませんが...

私は方法を持っています:

clickPopulate: function(){

     // Do some SQL

};

SQL lite Db 接続を処理するためにデータベース クラスを使用しています。使用しているメソッドのインターフェイスは次のとおりです。

 * Execute an arbitrary SQL command on the database.
 *
 * If you need to execute multiple commands in a transaction, use queries()
 *
 * Parameters:
 * - sql (string or query object, required)
 * - options (object):
 *    * values (array): replacements for '?' placeholders in SQL
 *      (only use if not passing a DatabaseQuery object)
 *    * onSuccess (function): method to call on successful query
 *        + receives single argument: results as an array of objects
 *    * onError (function): method to call on error; defaults to logging
 */


query: function(sql, options)

とにかく、いくつかの SQL といくつかのオプションを送信します。そのうちの 1 つは onSuccess コールバックです。

this.$.db.query("SELECT fullName, count(*) FROM user WHERE username=? and password=? GROUP BY username",
        {values: [inUser,inPass], onSuccess: enyo.bind(this, this.callBackFunction)});

私が本当にできるようにしたいのは、SQL結果の配列をクリックハンドラー関数-clickPopulateに返すことですが、呼び出しメソッドとして機能させることはできませんか?

何か案は?

4

1 に答える 1

2

非同期コールバックを元の呼び出し元に戻すことはできません。

あなたができる最も近いものはこのようなものです(私はEnyo apisを知らないので、私はいくつかの疑似的なものを使用します)

function clickPopulate() {
    db.query('Some SQL here', function(results) {
        //This is the code that will be run once the query is complete.
    });
}

したがって、基本的には、関数内のコールバックとしてクロージャを含めることができます。このように、元の呼び出し元の一部のように見えますが、実際にはそうではありません。


本当に必要な場合は、元の関数を呼び出して、クエリの結果かどうかを判断するために使用されるパラメーターを定義することもできますが、それはちょっと醜くて混乱を招きます。

于 2011-07-09T18:04:46.810 に答える