@track not working in connectedCallbackLWC property is not reactive@track vs @api (Lightning Web Components)LWC: Attaching event Listener Programmatically not workingLightning web component slot is not working inside select?CSS animation in LWC not workingaura.redirect not working with LWCTrack Input value in LWCEmbedding LWC in Aura Component not working?LWC property is not reactiveLWC emp API track field is not rendering
Why do the US media keep claiming that Iran is violating their nuclear deal?
Short story trilogy about a human whose parents were missionaries to a planet of cat people
Novel where a serial killer lives (almost) forever by swapping bodies
What is the most efficient algorithm to compute polynomial coefficients from its roots?
MS in Mathematics, having trouble finding work outside teaching algebra
Could the Ancient Egyptian hieroglyphs have been deciphered without the Rosetta Stone with modern tech?
Multiple processes redirecting to the same file with >
Stream of Thought/Creeping Chill Interaction?
Hoping for a satisfying conclusion (a musical connect wall)
How do I test if regression slopes are statistically different?
Ask Google to remove thousands of pages from its index after cleaning up from hacked site
Is there a website about artificial intelligence that is constantly updated?
How can I negotiate remote work due to my phobia
"Cобака на сене" - is this expression still in use or is it dated?
Nested CiviEvents
What would make the internet go away?
Why do airports in the UK have so few runways?
Was the whistle-blower's (12 Aug 2019) complaint deemed credible?
How to get out of the Ice Palace in Zelda A link to the Past?
Everybody knows how to make magical items. What about magical "places"?
What deck size is ideal?
Possible executive assistant job scam
How do I protect myself from bad contracting jobs?
Why did dict.get(key) work but not dict[key]?
@track not working in connectedCallback
LWC property is not reactive@track vs @api (Lightning Web Components)LWC: Attaching event Listener Programmatically not workingLightning web component slot is not working inside select?CSS animation in LWC not workingaura.redirect not working with LWCTrack Input value in LWCEmbedding LWC in Aura Component not working?LWC property is not reactiveLWC emp API track field is not rendering
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty
margin-bottom:0;
In LWC, on the component load, I am fetching the latitude and longitude of the logged in user and trying to display it on the component. I have created two attributes named lat and lng and marked it with @track decorator so that whenever the value of these attributes is changed, the component will rerender automatically. I am setting the value of these attributes in connectedCallback, but the updated value is not getting reflected on the component. Below is the html and js files.
<template>
<div class="slds-box">
<div class="slds-text-heading--large">Weather Report - lat lng</div>
</div>
</template>
import LightningElement, track from 'lwc';
export default class WeatherAppContainer extends LightningElement
@track lat;
@track lng;
connectedCallback()
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(showPosition);
function showPosition(position)
console.log("position: ",position);
console.log("position coords: ",position.coords);
console.log("position coords lat: ",position.coords.latitude);
this.lat = position.coords.latitude;
this.lng = position.coords.longitude;
console.log("lat: ",this.lat);
console.log("lng: ",this.lng);
The console "position coords lat" prints the value correctly, but the next console statment does not get printed. I am guessing that we cannot use this keyword in the connectedCallback. Any pointers how to solve this? Thanks.
lightning-web-components
add a comment
|
In LWC, on the component load, I am fetching the latitude and longitude of the logged in user and trying to display it on the component. I have created two attributes named lat and lng and marked it with @track decorator so that whenever the value of these attributes is changed, the component will rerender automatically. I am setting the value of these attributes in connectedCallback, but the updated value is not getting reflected on the component. Below is the html and js files.
<template>
<div class="slds-box">
<div class="slds-text-heading--large">Weather Report - lat lng</div>
</div>
</template>
import LightningElement, track from 'lwc';
export default class WeatherAppContainer extends LightningElement
@track lat;
@track lng;
connectedCallback()
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(showPosition);
function showPosition(position)
console.log("position: ",position);
console.log("position coords: ",position.coords);
console.log("position coords lat: ",position.coords.latitude);
this.lat = position.coords.latitude;
this.lng = position.coords.longitude;
console.log("lat: ",this.lat);
console.log("lng: ",this.lng);
The console "position coords lat" prints the value correctly, but the next console statment does not get printed. I am guessing that we cannot use this keyword in the connectedCallback. Any pointers how to solve this? Thanks.
lightning-web-components
add a comment
|
In LWC, on the component load, I am fetching the latitude and longitude of the logged in user and trying to display it on the component. I have created two attributes named lat and lng and marked it with @track decorator so that whenever the value of these attributes is changed, the component will rerender automatically. I am setting the value of these attributes in connectedCallback, but the updated value is not getting reflected on the component. Below is the html and js files.
<template>
<div class="slds-box">
<div class="slds-text-heading--large">Weather Report - lat lng</div>
</div>
</template>
import LightningElement, track from 'lwc';
export default class WeatherAppContainer extends LightningElement
@track lat;
@track lng;
connectedCallback()
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(showPosition);
function showPosition(position)
console.log("position: ",position);
console.log("position coords: ",position.coords);
console.log("position coords lat: ",position.coords.latitude);
this.lat = position.coords.latitude;
this.lng = position.coords.longitude;
console.log("lat: ",this.lat);
console.log("lng: ",this.lng);
The console "position coords lat" prints the value correctly, but the next console statment does not get printed. I am guessing that we cannot use this keyword in the connectedCallback. Any pointers how to solve this? Thanks.
lightning-web-components
In LWC, on the component load, I am fetching the latitude and longitude of the logged in user and trying to display it on the component. I have created two attributes named lat and lng and marked it with @track decorator so that whenever the value of these attributes is changed, the component will rerender automatically. I am setting the value of these attributes in connectedCallback, but the updated value is not getting reflected on the component. Below is the html and js files.
<template>
<div class="slds-box">
<div class="slds-text-heading--large">Weather Report - lat lng</div>
</div>
</template>
import LightningElement, track from 'lwc';
export default class WeatherAppContainer extends LightningElement
@track lat;
@track lng;
connectedCallback()
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(showPosition);
function showPosition(position)
console.log("position: ",position);
console.log("position coords: ",position.coords);
console.log("position coords lat: ",position.coords.latitude);
this.lat = position.coords.latitude;
this.lng = position.coords.longitude;
console.log("lat: ",this.lat);
console.log("lng: ",this.lng);
The console "position coords lat" prints the value correctly, but the next console statment does not get printed. I am guessing that we cannot use this keyword in the connectedCallback. Any pointers how to solve this? Thanks.
lightning-web-components
lightning-web-components
asked Jul 15 at 9:44
Ravi Dutt SharmaRavi Dutt Sharma
162 bronze badges
162 bronze badges
add a comment
|
add a comment
|
3 Answers
3
active
oldest
votes
this
is quite funny in javascript, in connectedCallback
this
refers to component, but in showPosition
as its async method, this
is undefined, and thus you cannot set lat and long
Usually, for this scenario, we pass the current component reference this
to showPosition method like one here. But as per Mozilla document , you cant pass custom parameter to getCurrentPositionCallback
You have to use fatArrow function for getCurrentPositionCallback
.
Thus your JS code will be:
import LightningElement, track, api from 'lwc';
export default class App extends LightningElement
@track lat;
@track lng;
connectedCallback()
console.log('Connected callback called'+ navigator.geolocation);
console.log(JSON.stringify(navigator.geolocation));
let myComponent = this;
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition((position)=>
console.log("position: ",position);
console.log("position coords: ",position.coords);
console.log("position coords lat: ",position.coords.latitude);
myComponent.lat = position.coords.latitude;
myComponent.lng = position.coords.longitude;
console.log("lat: ",myComponent.lat);
console.log("lng: ",myComponent.lng);
);
Playground Link : https://developer.salesforce.com/docs/component-library/tools/playground/htbBevIZr/2/edit
Thanks Pranay. Do you see any problem with below code:
– Ravi Dutt Sharma
Jul 15 at 10:44
connectedCallback() let self = this; if (navigator.geolocation) navigator.geolocation.getCurrentPosition(showPosition); function showPosition(position) self.lat = position.coords.latitude; self.lng = position.coords.longitude;
– Ravi Dutt Sharma
Jul 15 at 10:45
1
@RaviDuttSharma that will do. Fat Arrow functions are the elegant way to write inner function.
– Pranay Jaiswal
Jul 15 at 11:27
add a comment
|
The problem lies with how this
behaves in JavaScript. I strongly recommend reading https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
As to fixing your code, this one line change does the trick:
navigator.geolocation.getCurrentPosition(showPosition.bind(this));
You can read about bind
at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
1
+1, There is always an elegant way in javascript.
– Pranay Jaiswal
Jul 15 at 13:57
add a comment
|
this will be window object as functions in navigator returns promises - which makes it async methods/functions. I already answered this here:
LWC property is not reactive
However I am putting it here again:
This pitfall is quite common for salesforce developers working on Javascript. Set-Interval actually changes the context of this to window as functions like setInterval, setTimeout etc are async functions and hence these functions run after the main thread has finished processing. This can be addressed by any of 2 options:
- Lexical Scoping - old fashioned (pls do a google search for understanding)
- Arrow functions - Modern javascript. (PFB)
Just change the callback function from:
setInterval(function(), 500);
To
setInterval(() => , 500);
For simple understanding, Arrow functions don't have their own scope because of which it takes the scope of parent object.
There are many other advantages of arrow functions.
Further read: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
add a comment
|
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "459"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/4.0/"u003ecc by-sa 4.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f269416%2ftrack-not-working-in-connectedcallback%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
this
is quite funny in javascript, in connectedCallback
this
refers to component, but in showPosition
as its async method, this
is undefined, and thus you cannot set lat and long
Usually, for this scenario, we pass the current component reference this
to showPosition method like one here. But as per Mozilla document , you cant pass custom parameter to getCurrentPositionCallback
You have to use fatArrow function for getCurrentPositionCallback
.
Thus your JS code will be:
import LightningElement, track, api from 'lwc';
export default class App extends LightningElement
@track lat;
@track lng;
connectedCallback()
console.log('Connected callback called'+ navigator.geolocation);
console.log(JSON.stringify(navigator.geolocation));
let myComponent = this;
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition((position)=>
console.log("position: ",position);
console.log("position coords: ",position.coords);
console.log("position coords lat: ",position.coords.latitude);
myComponent.lat = position.coords.latitude;
myComponent.lng = position.coords.longitude;
console.log("lat: ",myComponent.lat);
console.log("lng: ",myComponent.lng);
);
Playground Link : https://developer.salesforce.com/docs/component-library/tools/playground/htbBevIZr/2/edit
Thanks Pranay. Do you see any problem with below code:
– Ravi Dutt Sharma
Jul 15 at 10:44
connectedCallback() let self = this; if (navigator.geolocation) navigator.geolocation.getCurrentPosition(showPosition); function showPosition(position) self.lat = position.coords.latitude; self.lng = position.coords.longitude;
– Ravi Dutt Sharma
Jul 15 at 10:45
1
@RaviDuttSharma that will do. Fat Arrow functions are the elegant way to write inner function.
– Pranay Jaiswal
Jul 15 at 11:27
add a comment
|
this
is quite funny in javascript, in connectedCallback
this
refers to component, but in showPosition
as its async method, this
is undefined, and thus you cannot set lat and long
Usually, for this scenario, we pass the current component reference this
to showPosition method like one here. But as per Mozilla document , you cant pass custom parameter to getCurrentPositionCallback
You have to use fatArrow function for getCurrentPositionCallback
.
Thus your JS code will be:
import LightningElement, track, api from 'lwc';
export default class App extends LightningElement
@track lat;
@track lng;
connectedCallback()
console.log('Connected callback called'+ navigator.geolocation);
console.log(JSON.stringify(navigator.geolocation));
let myComponent = this;
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition((position)=>
console.log("position: ",position);
console.log("position coords: ",position.coords);
console.log("position coords lat: ",position.coords.latitude);
myComponent.lat = position.coords.latitude;
myComponent.lng = position.coords.longitude;
console.log("lat: ",myComponent.lat);
console.log("lng: ",myComponent.lng);
);
Playground Link : https://developer.salesforce.com/docs/component-library/tools/playground/htbBevIZr/2/edit
Thanks Pranay. Do you see any problem with below code:
– Ravi Dutt Sharma
Jul 15 at 10:44
connectedCallback() let self = this; if (navigator.geolocation) navigator.geolocation.getCurrentPosition(showPosition); function showPosition(position) self.lat = position.coords.latitude; self.lng = position.coords.longitude;
– Ravi Dutt Sharma
Jul 15 at 10:45
1
@RaviDuttSharma that will do. Fat Arrow functions are the elegant way to write inner function.
– Pranay Jaiswal
Jul 15 at 11:27
add a comment
|
this
is quite funny in javascript, in connectedCallback
this
refers to component, but in showPosition
as its async method, this
is undefined, and thus you cannot set lat and long
Usually, for this scenario, we pass the current component reference this
to showPosition method like one here. But as per Mozilla document , you cant pass custom parameter to getCurrentPositionCallback
You have to use fatArrow function for getCurrentPositionCallback
.
Thus your JS code will be:
import LightningElement, track, api from 'lwc';
export default class App extends LightningElement
@track lat;
@track lng;
connectedCallback()
console.log('Connected callback called'+ navigator.geolocation);
console.log(JSON.stringify(navigator.geolocation));
let myComponent = this;
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition((position)=>
console.log("position: ",position);
console.log("position coords: ",position.coords);
console.log("position coords lat: ",position.coords.latitude);
myComponent.lat = position.coords.latitude;
myComponent.lng = position.coords.longitude;
console.log("lat: ",myComponent.lat);
console.log("lng: ",myComponent.lng);
);
Playground Link : https://developer.salesforce.com/docs/component-library/tools/playground/htbBevIZr/2/edit
this
is quite funny in javascript, in connectedCallback
this
refers to component, but in showPosition
as its async method, this
is undefined, and thus you cannot set lat and long
Usually, for this scenario, we pass the current component reference this
to showPosition method like one here. But as per Mozilla document , you cant pass custom parameter to getCurrentPositionCallback
You have to use fatArrow function for getCurrentPositionCallback
.
Thus your JS code will be:
import LightningElement, track, api from 'lwc';
export default class App extends LightningElement
@track lat;
@track lng;
connectedCallback()
console.log('Connected callback called'+ navigator.geolocation);
console.log(JSON.stringify(navigator.geolocation));
let myComponent = this;
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition((position)=>
console.log("position: ",position);
console.log("position coords: ",position.coords);
console.log("position coords lat: ",position.coords.latitude);
myComponent.lat = position.coords.latitude;
myComponent.lng = position.coords.longitude;
console.log("lat: ",myComponent.lat);
console.log("lng: ",myComponent.lng);
);
Playground Link : https://developer.salesforce.com/docs/component-library/tools/playground/htbBevIZr/2/edit
answered Jul 15 at 10:30
Pranay JaiswalPranay Jaiswal
25.1k5 gold badges36 silver badges78 bronze badges
25.1k5 gold badges36 silver badges78 bronze badges
Thanks Pranay. Do you see any problem with below code:
– Ravi Dutt Sharma
Jul 15 at 10:44
connectedCallback() let self = this; if (navigator.geolocation) navigator.geolocation.getCurrentPosition(showPosition); function showPosition(position) self.lat = position.coords.latitude; self.lng = position.coords.longitude;
– Ravi Dutt Sharma
Jul 15 at 10:45
1
@RaviDuttSharma that will do. Fat Arrow functions are the elegant way to write inner function.
– Pranay Jaiswal
Jul 15 at 11:27
add a comment
|
Thanks Pranay. Do you see any problem with below code:
– Ravi Dutt Sharma
Jul 15 at 10:44
connectedCallback() let self = this; if (navigator.geolocation) navigator.geolocation.getCurrentPosition(showPosition); function showPosition(position) self.lat = position.coords.latitude; self.lng = position.coords.longitude;
– Ravi Dutt Sharma
Jul 15 at 10:45
1
@RaviDuttSharma that will do. Fat Arrow functions are the elegant way to write inner function.
– Pranay Jaiswal
Jul 15 at 11:27
Thanks Pranay. Do you see any problem with below code:
– Ravi Dutt Sharma
Jul 15 at 10:44
Thanks Pranay. Do you see any problem with below code:
– Ravi Dutt Sharma
Jul 15 at 10:44
connectedCallback() let self = this; if (navigator.geolocation) navigator.geolocation.getCurrentPosition(showPosition); function showPosition(position) self.lat = position.coords.latitude; self.lng = position.coords.longitude;
– Ravi Dutt Sharma
Jul 15 at 10:45
connectedCallback() let self = this; if (navigator.geolocation) navigator.geolocation.getCurrentPosition(showPosition); function showPosition(position) self.lat = position.coords.latitude; self.lng = position.coords.longitude;
– Ravi Dutt Sharma
Jul 15 at 10:45
1
1
@RaviDuttSharma that will do. Fat Arrow functions are the elegant way to write inner function.
– Pranay Jaiswal
Jul 15 at 11:27
@RaviDuttSharma that will do. Fat Arrow functions are the elegant way to write inner function.
– Pranay Jaiswal
Jul 15 at 11:27
add a comment
|
The problem lies with how this
behaves in JavaScript. I strongly recommend reading https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
As to fixing your code, this one line change does the trick:
navigator.geolocation.getCurrentPosition(showPosition.bind(this));
You can read about bind
at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
1
+1, There is always an elegant way in javascript.
– Pranay Jaiswal
Jul 15 at 13:57
add a comment
|
The problem lies with how this
behaves in JavaScript. I strongly recommend reading https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
As to fixing your code, this one line change does the trick:
navigator.geolocation.getCurrentPosition(showPosition.bind(this));
You can read about bind
at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
1
+1, There is always an elegant way in javascript.
– Pranay Jaiswal
Jul 15 at 13:57
add a comment
|
The problem lies with how this
behaves in JavaScript. I strongly recommend reading https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
As to fixing your code, this one line change does the trick:
navigator.geolocation.getCurrentPosition(showPosition.bind(this));
You can read about bind
at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
The problem lies with how this
behaves in JavaScript. I strongly recommend reading https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
As to fixing your code, this one line change does the trick:
navigator.geolocation.getCurrentPosition(showPosition.bind(this));
You can read about bind
at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
edited Jul 15 at 13:56
Pranay Jaiswal
25.1k5 gold badges36 silver badges78 bronze badges
25.1k5 gold badges36 silver badges78 bronze badges
answered Jul 15 at 13:51
Kevin VenkiteswaranKevin Venkiteswaran
1,3605 silver badges13 bronze badges
1,3605 silver badges13 bronze badges
1
+1, There is always an elegant way in javascript.
– Pranay Jaiswal
Jul 15 at 13:57
add a comment
|
1
+1, There is always an elegant way in javascript.
– Pranay Jaiswal
Jul 15 at 13:57
1
1
+1, There is always an elegant way in javascript.
– Pranay Jaiswal
Jul 15 at 13:57
+1, There is always an elegant way in javascript.
– Pranay Jaiswal
Jul 15 at 13:57
add a comment
|
this will be window object as functions in navigator returns promises - which makes it async methods/functions. I already answered this here:
LWC property is not reactive
However I am putting it here again:
This pitfall is quite common for salesforce developers working on Javascript. Set-Interval actually changes the context of this to window as functions like setInterval, setTimeout etc are async functions and hence these functions run after the main thread has finished processing. This can be addressed by any of 2 options:
- Lexical Scoping - old fashioned (pls do a google search for understanding)
- Arrow functions - Modern javascript. (PFB)
Just change the callback function from:
setInterval(function(), 500);
To
setInterval(() => , 500);
For simple understanding, Arrow functions don't have their own scope because of which it takes the scope of parent object.
There are many other advantages of arrow functions.
Further read: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
add a comment
|
this will be window object as functions in navigator returns promises - which makes it async methods/functions. I already answered this here:
LWC property is not reactive
However I am putting it here again:
This pitfall is quite common for salesforce developers working on Javascript. Set-Interval actually changes the context of this to window as functions like setInterval, setTimeout etc are async functions and hence these functions run after the main thread has finished processing. This can be addressed by any of 2 options:
- Lexical Scoping - old fashioned (pls do a google search for understanding)
- Arrow functions - Modern javascript. (PFB)
Just change the callback function from:
setInterval(function(), 500);
To
setInterval(() => , 500);
For simple understanding, Arrow functions don't have their own scope because of which it takes the scope of parent object.
There are many other advantages of arrow functions.
Further read: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
add a comment
|
this will be window object as functions in navigator returns promises - which makes it async methods/functions. I already answered this here:
LWC property is not reactive
However I am putting it here again:
This pitfall is quite common for salesforce developers working on Javascript. Set-Interval actually changes the context of this to window as functions like setInterval, setTimeout etc are async functions and hence these functions run after the main thread has finished processing. This can be addressed by any of 2 options:
- Lexical Scoping - old fashioned (pls do a google search for understanding)
- Arrow functions - Modern javascript. (PFB)
Just change the callback function from:
setInterval(function(), 500);
To
setInterval(() => , 500);
For simple understanding, Arrow functions don't have their own scope because of which it takes the scope of parent object.
There are many other advantages of arrow functions.
Further read: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
this will be window object as functions in navigator returns promises - which makes it async methods/functions. I already answered this here:
LWC property is not reactive
However I am putting it here again:
This pitfall is quite common for salesforce developers working on Javascript. Set-Interval actually changes the context of this to window as functions like setInterval, setTimeout etc are async functions and hence these functions run after the main thread has finished processing. This can be addressed by any of 2 options:
- Lexical Scoping - old fashioned (pls do a google search for understanding)
- Arrow functions - Modern javascript. (PFB)
Just change the callback function from:
setInterval(function(), 500);
To
setInterval(() => , 500);
For simple understanding, Arrow functions don't have their own scope because of which it takes the scope of parent object.
There are many other advantages of arrow functions.
Further read: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
answered Jul 17 at 19:08
salesforce-sassalesforce-sas
13.5k2 gold badges4 silver badges29 bronze badges
13.5k2 gold badges4 silver badges29 bronze badges
add a comment
|
add a comment
|
Thanks for contributing an answer to Salesforce Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f269416%2ftrack-not-working-in-connectedcallback%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown