1

删除数组中的值后如何执行函数?

在我的代码中,我有这样的东西:

self.pictures.remove(this);

它正确删除了我的项目,但我需要在之后执行一个函数并且它不接受回调......

这是我想做的,但不可能......:

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

5 回答 5

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

从数组中删除元素通常不是异步的,不需要回调。2行将依次执行,一个接一个。

于 2013-07-09T07:26:09.857 回答
2

这里不需要使用回调,因为 remove() 函数是一个同步操作。

处理异步操作时需要回调,因为您不知道何时完成

self.pictures.remove(this);
alert('Item removed');
于 2013-07-09T07:26:23.757 回答
2

Array.remove 是同步的,这意味着在方法返回后项目被移除。

selv.pictures.remove(this);
alert('Item removed');
// do other stuff...
于 2013-07-09T07:26:49.473 回答
0

您可以修改remove的功能Array

像这样:

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

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

于 2013-07-09T07:31:24.387 回答
0

JavaScript 数组没有本地.remove()方法。在空白页面(即不是您正在测试的页面)上的 Chrome 控制台中键入此内容:

[].remove()

它打印:

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

因此,无论.remove()您调用什么方法,它都是由页面中的 JavaScript 代码定义的。

如果不知道该代码是什么,就无法知道您的问题的答案。你的.remove()方法是同步的吗?是异步的吗?它有什么作用?您需要查看代码并查看。

一个简单的方法是debugger;在您的通话之前立即发表声明,.remove()并在 Chrome 开发人员工具打开的情况下加载/执行您的页面。当它闯入调试器时,您可以单步执行该.remove()方法并查看它的实际作用。如果它进入已缩小且难以阅读的代码,请使用{}底部的按钮漂亮地打印代码。

或者,如果此.remove()方法来自某个库,请查看该库的文档。

就此而言,您self.pictures是实际Array的还是其他提供自己.remove()方法的对象类型?

很可能您的.remove()方法是一个普通的同步函数,但直到您查看页面中的实际代码或该函数的文档后您才会知道。

于 2013-07-09T07:43:04.423 回答