Oh very snazzy :) Thanks a million, I guess I should have read the promise
docs a bit more!


On Fri, Jul 11, 2014 at 9:31 AM, Charly Poly <[email protected]> wrote:

> Hi Liam,
>
> The scope of a thenable callback will always be window (or undefined in
> strict mode), this is written in the Promise A+ specification
> <http://promises-aplus.github.io/promises-spec/#point-69>.
>
> You can use angular.bind
> <https://docs.angularjs.org/api/ng/function/angular.bind> to force scope
> of your callback ;)
>
> Example :
>
> promise.then(angular.bind(this, callback))
>
>
> Regards,
> Charly
>
>
> On Friday, 11 July 2014 10:23:14 UTC+2, Liam Ryan wrote:
>>
>> Hi All,
>>
>> I'm trying to be clever and create prototypes to encapsulate a lot of my
>> behaviour. I'm running into issues when I want a fulfilled promise to call
>> another function in my prototype.
>>
>> Consider the following -
>>
>> function myClass ( ) {
>>     this.data = Object.create(this.data);
>>     this.$scope = Object.create(this.$scope);
>> }
>>
>> myClass.prototype = {
>>     $scope: {},
>>     data: {},
>>     getData: function (url) {
>>         $http({...http stuff here...})
>>             .then( function (httpData) {
>>                 this.filterHTTPData( httpData );
>>         });
>>     },
>>     filterHTTPData = function (data ) {
>>         console.log(data);
>>     }
>> }
>>
>>
>> The issue is that when the callback is executed (promise fulfilled) the
>> "this" object will refer to window, not my instance of myClass.
>>
>> I've tried working around this as follows but it feels bad and will fail
>> if there's any kind of delay ( I use callbacks in several places and nested
>> promises, probably colliding with other tempobjects).
>> Can anyone suggest a better way to handle this situation?
>>
>> myClass.prototype = {
>>     $scope: {},
>>     data: {},
>>     getData: function (url, $scope) {
>>         *$scope.tempObject = this;*
>>         $http({...http stuff here...})
>>             .then( function (httpData) {
>>                 *var thisObject = $scope.tempObject;*
>>                 this.filterHTTPData( httpData );
>>                 *delete $scope.tempObject*
>>         });
>>     },
>>     filterHTTPData = function (data ) {
>>         console.log(data);
>>     }
>> }
>>
>  --
> You received this message because you are subscribed to a topic in the
> Google Groups "AngularJS" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/angular/9MPPOcpVZYM/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/angular.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

Reply via email to