【问题标题】:Why is rowsAffected not returning an integer为什么 rowsAffected 不返回整数
【发布时间】:2014-06-05 16:12:19
【问题描述】:

我在 iOS 上为 SQLite 调用 executeSql 语句。我正在使用成功 [和错误] 回调方法,以便我可以确认受影响的记录数。

当它返回时,它已经正确定义了 3 个变量,但是当我尝试对 rowsAffected 进行“if”检查时,它不起作用,因为它认为它是一个对象。

这是在 Angular 服务中...

这是我的代码:

    $DBService.ExecuteQuery(script, params,
        function (insertId, rowsAffected, rows) {
            window.logger.logIt("rowsAffected: " + rowsAffected.toString());

            if (rowsAffected !== 1) {
                deferred.reject("Failed to update record. Query did not return 1 record affected.");
            } else {
                deferred.resolve();
            }
        },
        function (error) {
            deferred.reject("Failed to update record. " + error.message);
        }
    );

当我中断调试器并将鼠标悬停在 rowsAffected 变量上时,它会将其显示为类的属性,其中显示:insertId、rowsAffected = 1 和 rows。这些是成功回调中的 3 个参数。为什么当我将鼠标悬停在 rowsAffected 上时它会显示所有 3 个?此外,当我写入控制台窗口 (window.logger.logIt()) 时,它会将其显示为 [object object]。同样,这告诉我它认为它是一个类,而不是类的属性(或者只是我类中的一个变量)。

谁能告诉我这里发生了什么?

【问题讨论】:

  • 顺便说一句,我作弊并更改了我的代码以说 if (rowsAffected.rowsAffected !== 1) 并且有效,但它没有解释为什么。
  • 是什么让你认为它确实不是一个对象?
  • 只是通过文档说它返回 3 个参数,insertId、rowsAffected 和 rows。前两个是整数,第三个是受影响的行数组。 w3.org/TR/webdatabase

标签: javascript ios angularjs sqlite


【解决方案1】:

正如文档明确指出的那样:

executeSql() 方法以 SQLResultSet 对象 作为参数调用其回调。

所以传递给回调的参数是一个对象,具有三个指定的属性。 始终相信 DevTools。

所以,应该更像:

$DBService.ExecuteQuery(script, params,
    function (resultSetObj) {
        ...
        if (resultSetObj.rowsAffected !== 1) {
            ...

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2013-04-14
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    相关资源
    最近更新 更多