如何取消javascript中间隔内的函数调用?

时间:2013-10-24 08:00:25

标签: javascript angularjs

我在这里有以下代码(删除了一些行以使其更清晰)。当用户单击编辑图标时,将调用editRow()函数,这将打开一个模型窗口。在此之后,代码尝试通过调用factory.submitItem来每秒保存数据。除非保存数据有问题,否则一切正常。

如何实现这一点,以便如果factory.submit item entityResource.update失败,则取消间隔并且代码每秒停止执行一次保存。

     var factory = {

        gridSetup: function ($scope) {
            $scope.editRow = function (row, entityType) {
                // modal stuff happens here
                window.setTimeout(function () {
                    window.setInterval(function () {
                        factory.submitItem($scope, $scope.modal.data);
                    }, 1 * 60 * 1000);
                    factory.submitItem($scope, $scope.modal.data);
                }, 1 * 60 * 1000);
            }
        },

        submitItem: function ($scope, formData) {
            var idColumn = $scope.entityType.toLowerCase() + 'Id';
            var entityId = formData[idColumn];
            switch ($scope.modal.action) {
                case "edit":
                    var entityResource = $resource('/api/:et/:id', { et: $scope.entityType }, { update: { method: 'PUT' } });
                    entityResource.update({ id: entityId }, formData,
                        function (result) {
                            angular.copy(result, $scope.modal.data);
                        }, function (result) {
                            // what to put here ?
                        })
                    break;
            }
        },

3 个答案:

答案 0 :(得分:2)

myInterval = window.setInterval(function () {
    .....
}, 1 * 60 * 1000);

当你想要取消....

window.clearInterval(myInterval);

答案 1 :(得分:1)

setInterval()返回一个间隔ID,您可以将其传递给clearInterval():

var yourInterval = setInterval(function(), time);

您可以通过以下方式取消:

clearInterval(yourInterval);

答案 2 :(得分:0)

你可以做一些与众不同的事情。该计划可能是这样的:

var everythingIsOk = true;

function doSomething(){
    if (everythingIsOk) {
        setTimeout(doSomething(),5000);
    } else {
       everythingIsOk = false;
       return true;
    }
}