Javascript Binding SQL результаты к функции - PullRequest
2 голосов
/ 09 июля 2011

Все,

Я работаю с WebOS enyo, но у меня действительно очень важный момент ...

По сути тот факт, что его enyo не имеет никакого отношения к моему вопросу, однако ...

У меня есть метод:

clickPopulate: function(){

     // Do some SQL

};

Я использую класс базы данных для обработки моего соединения Db с SQL lite, интерфейс для используемого мной метода:

 * 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 и некоторые опции, одним из которых является обратный вызов 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 в мой обработчик кликовfunction - clickPopulate, но как вызывающий метод я не могу заставить его работать?

Есть идеи?

1 Ответ

2 голосов
/ 09 июля 2011

У вас не может быть асинхронного обратного вызова для возврата к исходному вызывающему.

Самое близкое, что вы можете сделать, это что-то вроде этого (так как я не знаю API Enyo, я просто буду использовать псевдопросто так)

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

Таким образом, вы можете включить замыкание в качестве функции обратного вызова внутри вашей функции.Таким образом, это выглядит как часть исходного вызова, но на самом деле это не так.


Если бы вы действительно этого хотели, вы могли бы заставить его вызвать исходную функцию обратно и определить некоторый параметр.который используется для определения того, является ли это результатом запроса, но это просто сделало бы его уродливым и запутанным.

...