我需要运行SQL SELECT语句并存储结果。然后我需要将这些结果传递给一个函数,并根据给定的数据点创建一个图形。请参阅下面的代码。
var dataKWhr = getCoverageAndKWhr();
console.log(dataKWhr);
createGraph(dataKWhr);
console.log("Created graph");
getCoverageAndKWhr
函数开始运行,但原始函数的其余部分继续使用日志语句和createGraph
。这会失败,因为此时未定义dataKWhr,因为它的值尚未从getCoverageAndKWhr()
返回。
我宁愿不延迟一个固定的秒数。有没有办法在继续之前等待第一行完成?
这是一个使用jQueryMobile的PhoneGap应用程序。目前正在Android上进行测试。
答案 0 :(得分:2)
如果没有getCoverageAndKWhr函数背后的代码,很难说出真正发生了什么。
也许某些执行路径不会返回值。
getCoverageAndKWhr也可以异步执行。如果是这种情况,您必须找到将getCoverageAndKWhr转换为同步调用的方法,或者传递一个getCoverageAndKWhr执行完成后将调用的回调函数。
答案 1 :(得分:1)
任何I / O操作肯定都是异步的。任何对SQLite / WebSQL DB的调用都会将回调作为其构造的一部分。你需要使用它们。 (然后,当你学会讨厌回调设计模式时,你可能希望转换为Promises。)
答案 2 :(得分:1)
我发现当你用Javascript编程时,总是假设每个函数都是异步的更容易。这就是为什么像这样的东西是禁忌的:
var dataKWhr = getCoverageAndKWhr();
createGraph(dataKWhr);
您需要使用回调,这是确保您的变量在使用之前填充的唯一现实方法。所以看起来应该更像这样:
getCoverageAndKWhr(createGraph);
我不知道getCoverageAnKWhr中有什么,但是如果你在那里进行ajax调用它会看起来像这样:
function getCoverageAndKWhr(callBack) {
$.ajax({
type: 'GET',
//whatever else
success: function (data) {
callback(data.KWhr);
}
});
}