SQLite 同步模式

7
我一直在使用SQLite、PhoneGap和JavaScript,并需要从SQLite数据库中获取信息。我能够获取所需的所有信息,插入、更新等。
问题在于JavaScript是异步工作的。也就是说,在从数据库中获取所有必要信息之前,它正在处理所有其他后续语句。
我一直在尝试使用回调并且已经很累了,因为在使用循环时有一些困难。(不能在循环中使用SQLite查询,因为循环在当前SQL查询被处理之前迭代,这不是我想要的。)
是否可以同步执行这些数据库操作?
更新:从这里找到了一个新的解决方案:webkit executesql sentence and loop problem

请查看caolan/async以帮助您管理异步操作(例如在系列中循环执行异步操作)。 - Chad
你解决了如何在循环中使用异步函数的问题吗?我目前正面临着这个问题。 - Post Self
@kim366 我最终做的是删除循环并将其全部更改为函数调用,这并不优雅。你可以尝试使用 JavaScript 中的新 await 函数来帮助你:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await 或者你可以阅读这篇文章:https://blog.lavrton.com/javascript-loops-how-to-handle-async-await-6252dd3c795 - Vignesh T.V.
是的,@VigneshT.V。这就是我想做的事情。我已经从sqlite3切换到了sqlite,因为它使用了promises。我仍在努力让它正常工作,但它看起来很有前途;这句话不是故意的双关语。 - Post Self
终于搞定了!使用 await,你可以将异步的东西变成同步的,而不必为此感到头疼。 - Post Self
2个回答

2
你可以使用Siminov Framework。它允许你对本地SQLite数据库进行同步/异步调用。它支持大多数混合框架,例如(Cordova, React Native, Xamarin)。
然而,如果你正在使用JavaScript构建混合应用程序,那么我建议使用异步调用,因为它比同步调用具有性能优势。

2
不是,但有一个库可能会有所帮助...
我刚开始使用它,它可以让你执行单个或多个SQL请求,并且只需要1个回调。它可能正是你所需要的 :)。 http://html5sql.com/

谢谢您的快速回复。您提到的库很好,但是不允许以同步方式在循环内执行异步操作。由于我正在循环中执行查询,因此不建议使用回调函数。 - Vignesh T.V.
你不能同步地进行调用。如果它在一个循环中,那么你必须调用一个函数,该函数使用每个执行回调来调用自身。 - Reinstate Monica Cellio
哦..这正是我目前正在做的事情,之所以提出这个问题,只是因为代码处理这件事太长了..无论如何,非常感谢.. - Vignesh T.V.
没关系。虽然它不是同步调用,但现在所有的东西都是异步的,不是吗 :) - Reinstate Monica Cellio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接