Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AngularJS fn is not a function error using $timeout with a function with parameters

I'm making a webpage that you can edit the text and after you stop typing for 1 second it will automagically save what you've typed.

Currently i'm just working out the $timeout details. I have it working when I call the update method with no params, but when I call it with params, I get the error:

Error: fn is not a function $TimeoutProvider/this.$get</timeout/timeoutId<@http://localhost:63342/express_example/bower_components/angular/angular.js:14014 completeOutstandingRequest@http://localhost:63342/express_example/bower_components/angular/angular.js:4300 Browser/self.defer/timeoutId<@http://localhost:63342/express_example/bower_components/angular/angular.js:4601

Why am I getting this error when doing:

timeout = $timeout(update(element, content), 1000);

but not when I do:

timeout = $timeout(update, 1000);

Obviously I need to pass the params into the update method because I need to know what to update.

debounceUpdate($(this), data.content);

var debounceUpdate = function(element, content) {
    console.log('in debouce');
    if (timeout) {
      $timeout.cancel(timeout);
    }

    timeout = $timeout(update(element, content), 1000);
};

// Update an existing section
var update = function(element, content) {
    console.log('in update');
    console.log('section_id to update is '+element.data('sectionId'));
    console.log(content);
}
like image 720
Catfish Avatar asked Apr 30 '14 14:04

Catfish


1 Answers

Your code calls update immediately and tries to pass its return value as the $timeout callback. You really wanted to call update from the $timeout handler instead:

timeout = $timeout(function() {update(element, content);}, 1000);
like image 183
Dark Falcon Avatar answered Oct 18 '22 17:10

Dark Falcon