2

全部,

我正在与 WebOS enyo 合作,但有一个非常资深的时刻......

基本上它的 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 和一些选项,其中之一是 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 api,所以我只会使用一些伪类的东西)

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 回答