[英]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.