簡體   English   中英

我的日志在 sqlite 數據庫事務之后沒有執行? 為什么它在數據庫事務之前執行?

[英]My log not executed after the sqlite database transaction? why its executes before the db transaction?

我正在從 Sqlite 表中獲取數據,並在本機反應中存儲到數組“favoritesData”中,但問題是,db 事務在日志之后執行,這意味着我得到一個空數組。

任何人都有以下代碼的解決方案....

getFavorits =() => {
    favoritesData = []        
    db.transaction(tx => {
        tx.executeSql(
            'SELECT * FROM table_favorites', [],
            (tx, results) => {
                len = results.rows.length;
                console.log('Total Fav = ', len);

                if (len > 0) {

                    for (let i = 0; i < results.rows.length; ++i) {
                        favoritesData.push(results.rows.item(i));
                    }
                }
            }
        );
    });
console.log("FAV DATA: ",favoritesData)
}

事務是異步的。 它不是阻塞的,因此日志記錄將(很可能)在數據庫操作完成之前執行。 您需要將日志記錄移動到 promise 鏈中。 交易完成后:

getFavorites = () => {
    favoritesData = [];
    db.transaction(tx => 
        tx.executeSql(
            'SELECT * FROM table_favorites', [],
            (tx, results) => {
                len = results.rows.length;
                console.log('Total Fav = ', len);

                for (let i = 0; i < results.rows.length; ++i) {
                    favoritesData.push(results.rows.item(i));
                }
            }
        );
    ).then(() => {
      console.log("FAV DATA: ",favoritesData)
    })
}

或者只是在循環之后記錄:

getFavorites = () => {
    favoritesData = [];
    db.transaction(tx => 
        tx.executeSql(
            'SELECT * FROM table_favorites', [],
            (tx, results) => {
                len = results.rows.length;
                console.log('Total Fav = ', len);

                for (let i = 0; i < results.rows.length; ++i) {
                    favoritesData.push(results.rows.item(i));
                }
                console.log("FAV DATA: ",favoritesData)
            }
        );
    )
}

也不需要 if(len > 0) ,因為循環會處理這個問題。

暫無
暫無

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

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