所有,
我正在使用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和一些选项,其中之一是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,但是作为其调用方法,我无法使其工作?
有任何想法吗?
最佳答案
您不能让异步回调返回到原始调用方。
您可以做的最接近的事情是这样的(因为我不知道Enyo api,所以我只会使用一些伪的东西)
function clickPopulate() {
db.query('Some SQL here', function(results) {
//This is the code that will be run once the query is complete.
});
}
因此,基本上,您可以在函数内部包含一个闭包作为回调。这样,它看起来像是原始呼叫者的一部分,但实际上并非如此。
如果确实需要,可以让它回调原始函数,并定义一些参数来确定它是否是查询的结果,但这只会使它有点丑陋和混乱。