为什么我的函数稍后调用,在显示此警报并显示第一个文档就绪警报之后......?

why my function call later, after display this alert and display first document ready alert.....?

在此代码中首先显示 abc 警报,然后我的函数调用并在函数警报中显示 WHy..?但在此代码中我首先调用我的函数,所以为什么先显示 abc 警报..?

    function GetDefaultChanter(){
        db.transaction(function (tx){
            tx.executeSql('SELECT Value FROM Setting where Key = "DefaultChanter";',[],querySuccessDefaultChanter);},                         
            errorCB);
    }

    function querySuccessDefaultChanter(tx,result){
        $.each(result.rows,function(index){
            var row = result.rows.item(index);
            var chantervalue = row["Value"];
            alert(chantervalue);
            $('#defaultchanterid').val("chantervalue");
        });
    }

$(document).ready(function (e) {

                        GetDefaultChanter();
                        var abc = $('#defaultchanterid').val();
                        alert(abc);

});

根据您的设置,您的 do.transaction 方法似乎是异步的。这意味着当您调用 GetDefaultChanter 时,对 do.transaction 的调用不会阻止 GetDefaultChanter 完成。然后执行下一行,包括您的警报,而 do.transaction 基本上在后台运行。每当该方法完成其工作时,它将调用您的回调方法,并且随时可能发生。

alert(abc) 首先触发,因为 executeSql() 是异步的,因此您需要在查询完成后 运行 执行任何操作,您需要放置该代码或从回调 querySuccessDefaultChanter() 函数。

Asynchronous vs Synchronous, what does it really mean?

旁注:Web SQL Database is deprecated and no longer maintained. I recommend switching to something else for new code such as IndexedDB.

javascript 中的数据库事务未阻塞。它们是异步执行的。由于 db.transaction 在执行 alert(abc) 之前未完成,因此显示警报提示。您需要在成功回调中显示警报,如下所示

function GetDefaultChanter(){
    db.transaction(function (tx){
        tx.executeSql('SELECT Value FROM Setting where Key = "DefaultChanter";',[],querySuccessDefaultChanter);},                         
        errorCB);
}

function querySuccessDefaultChanter(tx,result){
    $.each(result.rows,function(index){
        var row = result.rows.item(index);
        var chantervalue = row["Value"];
        alert(chantervalue);
        $('#defaultchanterid').val("chantervalue");

        //alert handled in callback
            var abc = $('#defaultchanterid').val();
                alert(abc);
        }
    });

$(document).ready(function (e) {

                        GetDefaultChanter();

});

https://developer.apple.com/library/content/documentation/iPhone/Conceptual/SafariJSDatabaseGuide/UsingtheJavascriptDatabase/UsingtheJavascriptDatabase.html#//apple_ref/doc/uid/TP40007256-CH3-SW4

我也是这样累的

   function GetDefaultChanter(){
        db.transaction(function (tx){
            tx.executeSql('SELECT Value FROM Setting where Key = "DefaultChanter";',[],querySuccessDefaultChanter);},                         
            errorCB);
    }

    function querySuccessDefaultChanter(tx,result){
        $.each(result.rows,function(index){
            var row = result.rows.item(index);
            var chantervalue = row["Value"];
            alert(chantervalue);
            $('#defaultchanterid').val("chantervalue");
        });
    }

$(document).ready(function (e) {

                        GetDefaultChanter();
                        var abc = $('#defaultchanterid').val();
                        alert(abc);

}); 

但这里我只使用警报和 console.log

http://jsfiddle.net/o2gxgz9r/3841/