Javascript在第一行代码完成之前执行第二行代码
我需要运行SQLSELECT语句并存储结果。然后我需要将这些结果传递到一个函数中,并根据给定的数据点创建一个图形。请参阅下面的代码Javascript在第一行代码完成之前执行第二行代码,javascript,sqlite,Javascript,Sqlite,我需要运行SQLSELECT语句并存储结果。然后我需要将这些结果传递到一个函数中,并根据给定的数据点创建一个图形。请参阅下面的代码 var dataKWhr = getCoverageAndKWhr(); console.log(dataKWhr); createGraph(dataKWhr); console.log("Created graph"); getcoverage和kwhr函数开始运行,但原始函数的其余部分继续运行log语句和createGraph。此操作失败,因为此时未定义
var dataKWhr = getCoverageAndKWhr();
console.log(dataKWhr);
createGraph(dataKWhr);
console.log("Created graph");
getcoverage和kwhr
函数开始运行,但原始函数的其余部分继续运行log语句和createGraph
。此操作失败,因为此时未定义dataKWhr,因为其值尚未从getCoverage和KWhr()返回
我不希望延迟固定的秒数。有没有办法等到第一行结束后再继续
这是一个带有jQueryMobile的PhoneGap应用程序。目前正在Android上测试。如果没有GetCoverage和KWHR函数背后的代码,很难判断到底发生了什么
可能某些执行路径没有返回值
GetCoverage和KWhr也可以异步执行。如果是这种情况,您必须找到一种方法将GetCoverage和KWhr转换为同步调用,或者传递一个回调函数,一旦GetCoverage和KWhr的执行完成,就会调用该回调函数。如果没有GetCoverage和KWhr函数后面的代码,很难判断到底发生了什么
可能某些执行路径没有返回值
GetCoverage和KWhr也可以异步执行。如果是这种情况,您必须找到将GetCoverage和KWhr转换为同步调用的方法,或者传递一个回调函数,该函数将在GetCoverage和KWhr执行完成后调用。任何I/O操作都肯定是异步的。对SQLite/WebSQL DB的任何调用都将回调作为其构造的一部分。你需要利用它们。(然后,当您开始讨厌回调设计模式时,您可能希望转换为。)可以肯定,任何I/O操作都将是异步的。对SQLite/WebSQL DB的任何调用都将回调作为其构造的一部分。你需要利用它们。(然后,当您开始讨厌回调设计模式时,您可能希望转换为。)我发现,当您使用Javascript编程时,更容易假设每个函数都是异步的。这就是为什么像这样的东西是不可以的:
var dataKWhr = getCoverageAndKWhr();
createGraph(dataKWhr);
您需要使用回调,这是确保在使用变量之前填充变量的唯一现实方法。所以它看起来应该更像这样:
getCoverageAndKWhr(createGraph);
我不知道GetCoverage Ankwhr中有什么,但是如果您在其中进行ajax调用,它看起来会像这样:
function getCoverageAndKWhr(callBack) {
$.ajax({
type: 'GET',
//whatever else
success: function (data) {
callback(data.KWhr);
}
});
}
我发现,当您使用Javascript编程时,更容易假设每个函数都是异步的。这就是为什么像这样的东西是不可以的:
var dataKWhr = getCoverageAndKWhr();
createGraph(dataKWhr);
您需要使用回调,这是确保在使用变量之前填充变量的唯一现实方法。所以它看起来应该更像这样:
getCoverageAndKWhr(createGraph);
我不知道GetCoverage Ankwhr中有什么,但是如果您在其中进行ajax调用,它看起来会像这样:
function getCoverageAndKWhr(callBack) {
$.ajax({
type: 'GET',
//whatever else
success: function (data) {
callback(data.KWhr);
}
});
}
您需要将回调函数传递给GetCoverage和KWhr(),以使其按您希望的方式工作。如果GetCoverage和KWhr中包含任何异步代码,则需要一个回调函数,如@errolfizgerald所述。可能的重复项需要将回调函数传递给GetCoverage和KWhr()为了让它按您想要的方式工作。如果GetCovernandKWHR中有任何异步代码,您将需要一个回调函数,如@ErrolFizGerald所说。可能是Thx的重复,我需要一个回调函数。Thx,我需要一个回调函数。