重新加载时从 sqlite 数据库中获取新数据

Posted

技术标签:

【中文标题】重新加载时从 sqlite 数据库中获取新数据【英文标题】:Fetch new data from sqlite database on reload 【发布时间】:2022-01-07 11:30:46 【问题描述】:

我设法将传感器数据输入到 sqlite3 数据库中。数据库中每 2 分钟出现一次新值。现在我想用 chart.js 显示它,因此使用 sql.js 我使用的代码是:

const config_sqljs = 
    locateFile: filename => (
      'https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.5.0/sql-wasm.wasm'
    )

  
const sqlPromise = initSqlJs(config_sqljs)

const dataPromise = fetch((
'/sensors.db'
))
.then(res => res.arrayBuffer())    
Promise.all([sqlPromise, dataPromise])

.then(([SQL, buf]) => 
const db = new SQL.Database(new Uint8Array(buf))
    //const res = db.exec('select time_,temp,humi  from sensors where topic=\"/x/sensors\"')
    const res = db.exec('select time_,temp,humi from sensors where topic =\"/y/sensors\" and (date=\"29.11.2021\" or date=\"30.11.2021\" or date=\"01.12.2021\");')

    const values = res[0].values;
    let labelx = values.map((arr) => arr[0]);
    let y = values.map((arr) => arr[1]);
    let y2 = values.map((arr) => arr[2]);
)

一开始效果很好,但后来我意识到数组 labelx、y 和 y2 中的值不是最新的,它们落后了大约半天。新值总是出现在数据库中。我认为它与 Promise.all() 和 .then 有关系,但不幸的是我对 js 了解不多。每次站点加载或重新加载时都会执行代码,即使我使用 Strg+F5 来强制进行完整的、未缓存的重新加载,它也保持不变。你能帮助我吗?谢谢!

【问题讨论】:

【参考方案1】:

Fetch 可能正在缓存响应。试试:

fetch('/sensors.db', 
  method: "GET",
  "cache-control": "no-store"
)

【讨论】:

以上是关于重新加载时从 sqlite 数据库中获取新数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中启动活动时从sqlite数据库中删除所有行(数据)

如何将自定义数组保存/重新加载到 plist

在几秒钟内重新加载 UiPageViewController

使用 useEffect 在页面加载时从上下文中获取数据

在 Android 中输入/加载基于 Jetpack Compose 的屏幕时从网络或数据库获取数据

使用 SQLite 数据库保存 CheckBox 状态