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对象是可行的。我之前的函数是将结果集推送到对象数组中,而不转换每一行。还是有点奇怪,他们的文档中没有任何东西表明结果集被锁定。