Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript对象锁定?_Javascript_Jquery_Object_Locking_Deferred - Fatal编程技术网

Javascript对象锁定?

Javascript对象锁定?,javascript,jquery,object,locking,deferred,Javascript,Jquery,Object,Locking,Deferred,我遇到了一个奇怪的问题,无法更新作为延迟承诺的一部分返回的对象的属性 // Update or Insert status information into the idr_status table this.updateStatus = function (idrInspData, statusId, submitting) { var def = new $.Deferred(); self.getIdrStatus (idrInspData.idr_date).done (

我遇到了一个奇怪的问题,无法更新作为延迟承诺的一部分返回的对象的属性

// Update or Insert status information into the idr_status table
this.updateStatus = function (idrInspData, statusId, submitting)
{
    var def = new $.Deferred();
    self.getIdrStatus (idrInspData.idr_date).done (function (idrStatus)
    {
        //status record exists for the day update record
        idrStatus.status_msg_id = statusId;
        idrStatus.submitted = submitting ? 1 : 0;
        idrStatus.modified = 1;

        idrStatus.action_needed = statusId.search('+') != -1 ? true : false;

        // update the status
        self.db.updateRecord (self.idrStatusTableName, idrStatus).always (
            function (updateResult)
            {
                def.resolve(true);
            });

    }).fail (function (result)
    {
       def.reject(result);
    });

    return (def.promise ());
}

idrStatus对象从SQLite结果集返回,然后转换为普通JS对象,然后解析为上面的done函数。对象进入,但任何编辑属性的尝试都将被忽略,相同的对象将被传递到updateRecord函数。我很困惑?为什么要锁定对象?

您是否在
.done
中调试,以查看当时是否分配了
idrStatus
?因为当输入
.done
时,我认为它不是幸运的,而是没有从数据库分配。如果这是荒谬的,请原谅我:D已经在SQLITEYes上工作了很长时间了,我在完成了内部调试。这就是我注意到对象属性值没有被重新指定的地方。超级怪异?我想我可以尝试在done中创建一个新的对象引用/副本。看看这是否有效,但我不认为我应该这样做。顺便说一句,我不确定你是否可以编辑结果集!正如您所说,如果您想更改数据,您可能应该在另一个对象中接收数据!是的,就是这样!结果集必须在SQLite JS API中锁定。因此,将每一行转换为普通JS对象是可行的。我之前的函数是将结果集推送到对象数组中,而不转换每一行。还是有点奇怪,他们的文档中没有任何东西表明结果集被锁定。