Javascript 在第一次完成之前执行第二行代码

Javascript executing second line of code before first finishes

本文关键字:代码 二行 执行 第一次 Javascript      更新时间:2023-09-26

我需要运行一个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); 
        }
    });
}