[英]Why a Javascript array passed as function parameter may lose it's content when the function is called sequentially?
我坐在這里一段時間,現在想知道為什么我在第二次調用它時在函數調用中丟失了一個數組參數。
我正在處理的腳本在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
,它將文檔的“復制和粘貼”版本從一個存儲轉移到另一個存儲(目標是每個存儲上都有可用的版本)。 我還使用文檔樹保存一個單獨的文件,該文件樹存儲所有版本哈希值。 使用PUT
提供的_revs_info
在SYNCs
上更新此樹文件。
我的問題是順序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中作為參數傳遞它們時?
謝謝!
編輯 :
我在我的第一個SYNC-PUT
PUT
之后添加了一個常規PUT
,它傳遞正常(沒有定義_revs_info
)。
JavaScript函數完全有可能改變傳入的數組。請考慮以下示例:
function removeAll(a) { a.splice(0); }
var arr = [1, 2, 3];
removeAll(arr);
console.log(arr); // empty array
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.