Javascript 在第一次完成之前执行第二行代码
Javascript executing second line of code before first finishes
我需要运行一个SQL SELECT语句并存储结果。然后我需要将这些结果传递到一个函数中,并根据给定的数据点创建一个图表。请参阅下面的代码。
var dataKWhr = getCoverageAndKWhr();
console.log(dataKWhr);
createGraph(dataKWhr);
console.log("Created graph");
getCoverageAndKWhr
函数开始运行,但原始函数的其余部分继续使用 log 语句并createGraph
。此操作失败,因为此时未定义 dataKWhr,因为它的值尚未从 getCoverageAndKWhr()
返回。
我宁愿不设置固定秒数的延迟。 有没有办法等待第一行完成再继续?
这是一个带有jQueryMobile的PhoneGap应用程序。目前正在安卓上测试。
如果没有getCoverageAndKWhr函数背后的代码,很难说到底发生了什么。
也许某些执行路径不返回值。
getCoverageAndKWhr 也可以异步执行。 如果是这种情况,您必须找到一种方法将getCoverageAndKWhr转换为同步调用,或者传递一个回调函数,该函数将在getCoverageAndKWhr的执行完成后调用。
当然,任何 I/O 操作都是异步的。任何对SQLite/WebSQL DB的调用都将有回调作为其构造的一部分。您需要利用它们。(然后,当你学会讨厌回调设计模式时,你可能希望转换为 Promises。
我发现当你用Javascript编程时,更容易总是假设每个函数都是异步的。 这就是为什么这样的东西是禁忌:
var dataKWhr = getCoverageAndKWhr();
createGraph(dataKWhr);
您需要使用回调,这是确保变量在使用之前填充的唯一现实方法。 所以它应该看起来更像这样:
getCoverageAndKWhr(createGraph);
我不知道getCoverageAnKWhr中有什么,但是如果你在那里进行ajax调用,它看起来像这样:
function getCoverageAndKWhr(callBack) {
$.ajax({
type: 'GET',
//whatever else
success: function (data) {
callback(data.KWhr);
}
});
}
相关文章:
- 如何从rails中的代码中删除新行( )
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- 解析云代码作业:删除在数据库中已经存在一个小时的行
- Github Flavored Markdown-空行代码块获胜't渲染
- jQuery代码,用于在检查行时获取其他列的数据
- 如何获取dom元素的代码行号
- 行之间有空格会影响 JavaScript 代码的性能吗?
- 有谁知道这行代码的输出是什么?$.get(“http://192.168.4.1:80/”, {pin:p}.
- 使用 Javascript 动态删除行.我的代码有什么问题
- 这行代码中的每个函数在角度js中暗示或引用
- 选择“行在 Chrome 和 Firefox 中不起作用(生成的代码)”
- 如何允许引导框接受多行代码
- 用于在表中添加行的Javascript代码将单元格中的数据复制到新行中
- 如何将多行javascript代码写入带有节点的文件
- Javascript赢得'Don’不要跳过前两行代码
- 我可以'不要让这几行简单的代码正常工作,也不知道为什么
- Moment.js折旧-如何找到引起警告的代码行
- 正在查找这些JQuery代码行的Javascript
- REGEX-当内部内容有换行符时,HTML到短代码换行
- Javascript代码(换行,循环)