0

ここに次のコードがあります(より明確にするためにいくつかの行が削除されています)。ユーザーが編集アイコンをクリックすると、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;
            }
        },
4

3 に答える 3

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

そしてキャンセルしたいときは…

window.clearInterval(myInterval);
于 2013-10-24T08:04:40.513 に答える
1

setInterval()clearInterval() に渡すことができるインターバル ID を返します。

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

次の方法でキャンセルできます。

clearInterval(yourInterval);
于 2013-10-24T08:09:49.110 に答える
0

そのために別のことを行うことができます。スキームは次のようになります。

var everythingIsOk = true;

function doSomething(){
    if (everythingIsOk) {
        setTimeout(doSomething(),5000);
    } else {
       everythingIsOk = false;
       return true;
    }
}
于 2013-10-24T08:14:07.333 に答える