【问题标题】:Error when adding data from an asynchronous request to a WebSQL database将异步请求中的数据添加到 WebSQL 数据库时出错
【发布时间】:2013-11-10 02:11:40
【问题描述】:

我正在使用 Phonegap / Cordova 为 Android 构建一个应用程序,它使用设备日历。我编写了一个插件(“Calify”),可以将事件添加到设备日历中,效果很好。但是,我正在尝试将插件返回的设备日历事件 ID 添加到 Web-SQL 数据库中的记录中,但这给了我以下错误(在 Android 模拟器中运行):

file:///android_asset/www/cordova-2.2.0.js: Line 1090 : processMessage failed: Message: S01 Calify507282772 s[{"id":191,"calid":615}]
file:///android_asset/www/cordova-2.2.0.js: Line 1091 : processMessage failed: Error: Error: INVALID_STATE_ERR: DOM Exception 11

这是我的代码的样子。

window.addEvent(function(insertions){
    data = JSON.parse(insertions);
    console.log(insertions);
    event_id = data[0]['calid'];
    id = data[0]['id'];

    tx.executeSql('UPDATE AFSPRAKEN SET eventID=? WHERE id=' + id, [event_id]);
}, [calendarID, [{start: start.getTime(), end: end.getTime(), title: event_title}]]);

“插入”日志给了我想要的结果,以及单独记录“event_id”和“id”。它似乎与数据库插入有关(这也是异步的)。 请注意,此函数在数据库事务中运行,这是必需的,因为我也在此日历事件函数之外运行一些其他查询。注释掉插入查询使代码运行没有错误。

DOM Exception 11 似乎意味着该对象(我猜是“插入”?)不再可访问,也许与此有关。

【问题讨论】:

  • 我已经设法通过将 addEvent 的参数添加到一个数组来解决这个问题,当数据库事务成功时我会对其进行迭代。在迭代中运行 addEvent 函数,该函数在完成时创建一个新的数据库事务以更新相应的记录。仍然欢迎解释原始行为的明确答案,但我的猜测是它是由嵌入在另一个异步请求(db 事务)中的异步请求(addEvent 函数)引起的,前一个请求的完成试图在后者。

标签: javascript asynchronous cordova web-sql


【解决方案1】:

我认为我现在犯的错误很明显,所以对于通过谷歌找到这个问题的每个人(错误消息并没有真正指向正确的方向),这就是我的代码给出错误的原因:

数据库事务是异步的,Phonegap 插件也是如此。 Phonegap 函数在数据库事务外部完成,因此无法在该事务内部运行数据库查询。这可以通过多种方式解决:

  • 在Phonegap通信的完整功能中打开一个新的数据库事务
  • 和我一样,在数据库事务之后连接Phonegap插件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多