我正坐在这里一段时间,现在想知道为什么我在第二次调用它时会在函数调用中丢失一个数组参数。
我正在处理的脚本在CouchDB / PouchDB之后映射,并将项目作为JSON字符串存储在多个存储(包括本地存储)中。参数是:
_id id of the item
_rev revision string (version), counter and hash
_content whatever content
_revisions array of all prior hashes and current counter
_revs_info all previous revisions of this item with status
我目前正在尝试PUT
操作,默认情况下会更新现有文档。当我使用多个存储时,我还有一个PUT SYNC
,它将文档的“复制和粘贴”版本从一个存储转移到另一个存储(目标是每个存储上都有可用的版本)。我还使用文档树保存一个单独的文件,该文件树存储所有版本哈希值。此树文件使用SYNCs
提供的_revs_info
在PUT
上更新。
我的问题是顺序SYNC PUTs
。第一个工作,第二个我失去了_revs_info
参数。我不知道为什么......
这是我的第一个电话(来自我的QUnit模块),工作正常:
o.jio.put({
"content":'a_new_version',
"_id":'myDoc',
"_rev":"4-b5bb2f1657ac5ac270c14b2335e51ef1ffccc0a7259e14bce46380d6c446eb89",
"_revs_info":[
{"rev":"4-b5bb2f1657ac5ac270c14b2335e51ef1ffccc0a7259e14bce46380d6c446eb89","status":"available"},
{"rev":"3-a9dac9ff5c8e1b2fce58e5397e9b6a8de729d5c6eff8f26a7b71df6348986123","status":"deleted"},
{"rev":fake_rev_1,"status":"deleted"},
{"rev":fake_rev_0,"status":"deleted"}
],
"_revisions":{
"start":4,
"ids":[
"b5bb2f1657ac5ac270c14b2335e51ef1ffccc0a7259e14bce46380d6c446eb89",
"a9dac9ff5c8e1b2fce58e5397e9b6a8de729d5c6eff8f26a7b71df6348986123",
fake_id_1,
fake_id_0
]}
},
function(err, response) {
// run tests
});
然而,当我第二次调用同一个函数时:
o.jio.put({
"content":'a_deleted_version',
"_id":'myDoc',
"_rev":"3-05210795b6aa8cb5e1e7f021960d233cf963f1052b1a41777ca1a2aff8fd4b61",
"_revs_info":[ {"rev":"3-05210795b6aa8cb5e1e7f021960d233cf963f1052b1a41777ca1a2aff8fd4b61","status":"deleted"},{"rev":"2-67ac10df5b7e2582f2ea2344b01c68d461f44b98fef2c5cba5073cc3bdb5a844","status":"deleted"},{"rev":fake_rev_2,"status":"deleted"}],
"_revisions":{
"start":3,
"ids":[
"05210795b6aa8cb5e1e7f021960d233cf963f1052b1a41777ca1a2aff8fd4b61",
"67ac10df5b7e2582f2ea2344b01c68d461f44b98fef2c5cba5073cc3bdb5a844",
fake_id_2
]}
},
function(err, response) {
// run tests
});
我的脚本失败,因为_revs_info
数组不包含任何内容。我正在添加的所有其他参数和所有随机参数都会被传输。如果我添加string
或object
而不是array
,他们也会安全地将其添加到我的脚本中。
但是数组......没有传递......
问题:
我一直坐在这里几个小时试图找到我没有找到的点,但我很无能为力。所以有人知道原因,为什么arrays
可能会失去他们的内容,当他们在Javascript中作为参数传递时?
谢谢!
修改:
我在我的第一个PUT
之后添加了一个常规SYNC-PUT
,其传递正常(未定义_revs_info
)。
答案 0 :(得分:0)
JavaScript函数完全有可能改变传入的数组。请考虑以下示例:
function removeAll(a) { a.splice(0); }
var arr = [1, 2, 3];
removeAll(arr);
console.log(arr); // empty array