我有一个JavaScript类来处理对本地数据库(在WebOs设备上)的查询。现在我想做的是,创建一个包含所有基本查询的模型,以简化我的代码。
首先我创建一个函数:
getLists: function(){
this.query( 'SELECT * FROM lists ORDER BY rowID DESC', {
onSuccess: enyo.bind(this,function(data) { this.getData(data); } ),
onError: function() { return false; } } );
}
而且我的回调函数接收数据:
getData: function(data){
return data;
}
现在我想做什么,就是从我的应用程序中调用它:
var data = getLists();
问题是,这不是从我的回调函数(getData)返回数据。我的问题是如何让“getLists”从回调中返回数据?
谢谢
答案 0 :(得分:2)
你在思考帝国:C跟随B跟随A.忘掉那个。
AJAX和现代JavaScript的工作方式不同。你永远不会说“现在获取数据”,你说“当数据可用时调用X”。
因此,解决方案是编写一些代码,这些代码对数据有用。我们称这个函数为a
。而不是:
var data = conn.getData();
a( data );
b( data );
c( data );
你做了
conn.getData( a ); // a has to call b which calls c.
最终,数据将在那里,a
将以data
作为参数进行调用。
请参阅?与传统编程一样,您不会将呼叫链接到a()
和b()
。相反,您可以创建执行所需功能的函数并传递这些函数。
答案 1 :(得分:1)
你没有。 AJAX中的第一个A是异步的。请求与其他处理“过时”发生。调用getLists
后,它会在启动AJAX请求后返回,并在远程服务器响应AJAX请求时调用回调函数。
- 编辑评论 -
如果您想“观察”变量,可以使用以下内容:
// Set up a container for the data to return to.
var retData;
// Modify the getData function to assign to the global variable
getData: function (data) {
retData = data;
}
// Start the "wait" process.
var myInterval = setInterval(function () {
if (retData == undefined) {
return;
}
// when the return data shows up stop waiting.
clearInterval(myInterval);
// some other data processing here in this function
// or trigger the actual processing function.
// don't have to pass retData to it, it's global, the
// data handler function can retrieve it itself.
myDataHandler();
}, 1000);
// make the ajax call here.
getLists();