gpt4 book ai didi

javascript - Node.js:接收链式数据,同时异步保存到数据库

转载 作者:行者123 更新时间:2023-12-02 23:13:45 25 4
gpt4 key购买 nike

我正在 JS (Node.js) 中使用套接字与远程主机进行通信。当我连接到远程主机后,远程主机向我发送了一组数据。当我收到数据时,我需要解析数据并将它们存储在我的数据库中(使用 Sequelize)。这些条目链接在一起。因此,在将条目 2 写入数据库之前,条目 1 必须存在。

问题是保存到数据库是异步的,而接收数据是同步的。假设我在 Socket 的“data”事件中收到前 10 个数据库条目,我解析第一个条目并将该条目保存到数据库中。保存到数据库是异步的,因此在将第一个条目保存到数据库时,“数据”事件可能会再次发生(接收条目 11 到 20)。所以我再次解析并将条目 11 保存到我的数据库中。但是当保存第 11 条时,前 10 条不会保存...

如何解决这个问题?我已经考虑过 blukCreate() 函数,但这并不能解决问题,因为我需要任何“事件”或“点”,我可以在其中说“在接收下一个数据之前等待异步操作”。知道如何解决这个问题吗?

最佳答案

您可以使用非阻塞锁:

   const createLock = () => {   
let chain = Promise.resolve();
return (task) => {
const result = chain.then(() => task());
chain = result.catch(() => {});
return result;
};
};

这样你就可以像这样使用锁:

  const useDB = createLock();

const addEntry = entry => useDB(async () => {
await db.add(entry);
});

addEntry(0);
addEntry(1); // will only be added after 0 is done

关于javascript - Node.js:接收链式数据,同时异步保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57238548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com