簡體   English   中英

WebSQL和Javascript的操作順序

[英]WebSQL and Javascript Order of Operation

我的應用程序使用的是javascript webSQL,並且命令執行順序出現問題。 無論我的代碼在查詢中的順序如何,都將最后執行。 例如,在以下代碼2中,將在1之前發出警報:

db.transaction(
        function (transaction) {
        transaction.executeSql(
        'SELECT * FROM contacts WHERE id = ?;',
        [id],
        function (transaction, result) {
           alert("1");
           if (result.rows.length != 0) {
            user = result.rows.item(0).name;
           } else {}
        },
        errorHandler);
    });

alert("2");
message = id + '%1E' + name;

任何想法為什么會發生這種情況?

當您發出alert(“ 2”)時,您尚未完成交易,因此傳遞給它的第二個函數沒有被調用。 由於它是我假設的success處理程序,因此將在事務成功完成后調用它。 第三個參數將是查詢失敗時(僅在查詢失敗時)執行的代碼段。

當頁面加載了足以執行javascript的內容時,將執行事件處理程序代碼之外的所有內容。 請注意,整個頁面無需加載即可執行alert("2") ,僅夠使用JS。 由於這些語句彼此靠近,因此在到達並執行alert(“ 2”)語句之前,交易完成的可能性基本上為0。

但是,如果您在alert("2")和db.transaction(...)之間有足夠的代碼,則可能(在所謂的競態條件下 )可以在alert(2)代碼之前執行回調。

在這種情況下,您要小心事件處理程序,盡管這取決於成功處理程序的工作方式。 如果它修改了頁面DOM,那么我強烈建議將db.transaction()和周圍的代碼包裝在綁定到頁面加載的事件處理程序中。

這不是您問題的答案,但我想我應該給您關於webSQL的警告。

截至2010年11月18日,W3C已宣布他們已棄用Web SQL數據庫建議草案,並將不再維護它。

因此,盡管目前它可以在瀏覽器中運行,但將來我將不再依賴它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM