我知道,使用JavaScript和'atomic'這兩個詞 - 同一句子中的任何內容都有點奇怪,因爲JavaScript被認爲是異步的,因此它不是非常原子的。由異步ajax回調導致的「原子」操作
//編輯 這是我的錯誤!通過讓警報消失(並在鉻中隱藏更多警報),它會迅速中斷並讓其他代碼飛行。 JavaScript是單線程的。
快速 - >實際問題; 在哪種情況下我們可以通過異步回調中斷進行保存,我們如何防止它們在某些代碼塊中出現?
長 - >我的情景; 我的整個應用程序是非常遞歸的,並觸發許多Ajax請求,在返回時觸發更多的遞歸函數,可能會觸發更多的Ajax請求。 在我的代碼中,我對數組有一些非常重要的操作,它們必須在下一個操作發生之前完成(儘管簡單的推/拼接邏輯)。
我有一個問題,我得到了一個數組中的一個鍵的索引並將其保存在一個變量中。然後我將它與-1進行比較,如果它是真的,我拼接(不僅是未設置)數組中的元素。 現在,在獲取索引和拼接之間,異步回調與結果一起返回並開始遞歸,然後通過添加/刪除更多項目(並搞亂之前獲得的索引值)來更改數組。
這是舊代碼;
if (this.dataset && (index=this.dataset.children.indexOf(child.key))!==-1){
console.log("removed from dataset!");
//<=== AJAX Call Returns and adds/removes items from the array
this.dataset.children.splice(index, 1); //goes bad, because index not good anymore
...
}
,這是「工作」,而不是優化的代碼
if (this.dataset && (index=this.dataset.children.indexOf(child.key))!==-1){
console.log("removed from dataset!");
//<=== AJAX Call Returns and adds/removes items from the array
//Problem solved, since I'm getting the index again
this.dataset.children.splice(this.dataset.children.indexOf(child.key), 1);
...
}
我只是簡單地再次搜索索引,直接拼接它拿走。
我的一般問題是,在哪種情況下我們可以通過異步回調中斷進行保存,並且我們如何防止它們在某些代碼塊中出現?
我的具體問題,各位StackOverflowers,如果是在理論上,Ajax回調可在之間稱爲的功能的indexOf返回指數和拼接功能切割陣列了。
謝謝您的幫助
P.S我知道,我只是能取消設置陣列領域,我的問題,指數將得到解決。但那不是我想要的,因爲我在序列化這些信息,並且不需要100個空的條目。尋找一種通用的方法是我的目標:)
謝謝!我意識到自己剛剛得到了很好的迴應,當時我意識到自己的警報在兩者之間被解僱,導致回調不能觸發。 – japrescott