2013-07-09 57 views
1

如何刪除我的數組中的值後執行函數?array.remove()後回調()

在我的代碼,我有這樣的事情:

self.pictures.remove(this); 

它正確刪除我的項目,但我需要後執行的函數,它不接受回調...

這是我倒是喜歡做,但不可能...:

self.pictures.remove(this, function() { 
    alert('Item removed'); 
}); 
+2

調用'.remove()'時,執行將不會繼續 直到完成刪除。不需要回撥。 – Nope

+0

你能提供同樣的jsfilldle嗎? – Manish

+0

@FrançoisWahl:你怎麼知道remove()是同步的? – dandavis

回答

4
self.pictures.remove(this); 
alert('Item removed'); 

從數組中刪除元素通常不異步,不需要回調。這兩行將依次執行。

2

由於remove()函數是一個同步操作,因此不需要使用回調函數。

需要進行回調出現,當你處理異步操作,因爲你不知道它什麼時候會完成

self.pictures.remove(this); 
alert('Item removed'); 
+0

你怎麼知道remove()是同步的? – dandavis

2

Array.remove是同步的,這意味着該方法返回後,該項目被刪除。

selv.pictures.remove(this); 
alert('Item removed'); 
// do other stuff... 
+0

你怎麼知道[] .remove()是同步的? – dandavis

+0

@dandavis嗯,這實際上是一個很好的觀點。這可能是我習慣於爲我提供它的庫。 – Alxandr

0

您可以修改Array

像這樣remove功能:

(function() { 
Array.prototype.remove = function(index, callback) { 
    this.splice(index, 1); 
    if (callback){ 
     callback(); 
    } 
    return this; 
}; 
})(); 

例子:http://jsfiddle.net/8UUaD/

0

JavaScript數組沒有本地.remove()方法。在Chrome控制檯鍵入此一空白頁上(即不是你正在測試的頁面):

[].remove() 

它打印:

TypeError: Object [object Array] has no method 'remove' 

因此,無論.remove()方法你打電話,這是一個這是由頁面中的JavaScript代碼定義的。

不知道代碼是什麼,沒有辦法知道你的問題的答案。你的.remove()方法是同步的嗎?它是異步的嗎?它有什麼作用?您需要查看代碼並查看。

一個簡單的方法是在打開Chrome開發人員工具調用並加載/鍛鍊您的頁面之前立即添加debugger;聲明。當它進入調試器時,您可以進入.remove()方法並查看它的實際功能。如果它進入已被縮小且難以閱讀的代碼,請使用底部的{}按鈕來打印代碼。

或者,如果此.remove()方法來自庫,請檢查該庫的文檔。

對於這個問題,你的self.pictures是一個實際的Array還是它提供自己的.remove()方法的一些其他對象類型?

機會是你的.remove()方法是一個普通的同步函數,但直到你看到頁面中的實際代碼或該函數的文檔時纔會知道。

+0

「有沒有辦法知道你的問題的答案」 - 然而你提供了一個......嗯,這是一個評論... – zeroflagL

+0

@zeroflagL - 原諒我慢,但我不明白你的意思。這聽起來像我的答案有問題。不過,我不知道那是什麼,我會很感激這個問題。你能澄清嗎? –

+0

你的答案本身就沒問題。但是如果「沒有辦法知道你的問題的答案」,那麼爲什麼試圖首先回答呢?這真的只是這個條款,讓我添加評論:)隨意忽略我。 – zeroflagL