我猜这是一个非常简单的(但JS不是我最好的朋友而且我被卡住了......)
如何返回rows
值? (未定义......)
function myFunction(table){
html5sql.process(
["SELECT * FROM "+table],
function(transaction, results, rowsArray){
rows = rowsArray; // rows is defined here
},
function(error, statement){
});
return rows; // rows is not defined here :(
}
答案 0 :(得分:4)
你可能无法做到,因为你现在有东西。由于JS默认是异步的,因此即使在任何回调运行之前,也会返回rows
。由于成功回调是设置 rows
,因此您将始终返回未设置或过时值。
(注意:我从来没有使用过html5sql。可能是这个库只是提供了一个看起来像异步的接口,但实际上它是同步工作的。但如果确实如此,那么在这方面就不常见了。)
一种可能的解决方法是自己进行回调,一旦获得它们就调用并传递行。
function myFunction(callback){
html5sql.process(
["SELECT * FROM "+table],
function(transaction, results, rowsArray){
callback(rowsArray);
},
function(error, statement){
});
}
// and use it like this
myFunction(function(rows) {
// do stuff with rows in here
});
或者,如果您想要懒惰,只需使用callback
作为process
的第二个参数。只要知道它将通过所有三个args,这个函数的调用者不应该关心。 :P
答案 1 :(得分:0)
在分配它的值之前声明rows
:
function myFunction(){
var rows;
html5sql.process(
["SELECT * FROM "+table],
function(transaction, results, rowsArray){
rows = rowsArray; // rows is defined here
},
function(error, statement){
});
return rows; // rows is not defined here :(
}
这改变了变量范围,并使其在内部函数外部可见和可访问。
答案 2 :(得分:0)
小改变......
function myFunction(){
var rows;
html5sql.process(
["SELECT * FROM "+table],
function(transaction, results, rowsArray){
rows = rowsArray;
},
function(error, statement){
});
return rows;
}
你得到一个未定义的因为你还没有真正定义它 - 在函数的开头这样做将使它特定于该范围并且应该正确返回。