-
Notifications
You must be signed in to change notification settings - Fork 37
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add some timing tests for trackedFunction #1011
Conversation
Run & review this pull request in StackBlitz Codeflow. |
🦋 Changeset detectedLatest commit: c982307 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Estimated impact to a consuming app, depending on which bundle is imported
|
Preview URLsreadme: https://693ebe38.ember-resources.pages.dev |
ember-resources/src/util/function.ts
Outdated
// We've previously had data, but we're about to run-again. | ||
// we need to do this again so `isLoading` goes back to `true` when re-running. | ||
if (this.data) { | ||
this.data = null; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is the fix
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This makes a lot of sense. And these code comments are great
Blocked on actions/setup-node#865 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks a bunch. Tests are great too!
ember-resources/src/util/function.ts
Outdated
// We've previously had data, but we're about to run-again. | ||
// we need to do this again so `isLoading` goes back to `true` when re-running. | ||
if (this.data) { | ||
this.data = null; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This makes a lot of sense. And these code comments are great
@@ -7,7 +7,7 @@ import { module, test } from 'qunit'; | |||
import { setupRenderingTest } from 'ember-qunit'; | |||
import { setOwner } from '@ember/application'; | |||
|
|||
import { use, resource, resourceFactory } from 'ember-resources'; | |||
import { cell, use, resource, resourceFactory } from 'ember-resources'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks like this cell import is unused, probably leftover from investigation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks, yeah, I need to fix linting on this repo 🙃
there is a bug with prettier rn though, and I'm waiting for them to do another release
step(`fn:begin:${value}`); | ||
await Promise.resolve(); | ||
step(`fn:end:${value}`); | ||
return `yay:${value}`; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
😄
I'll find some time today to pnpm patch the fix in my app to test it out, but I'm pretty confident you nailed it |
ooo this is good to catch before merging this -- what's the code that caused that? |
The error points to line 188 in that minified source which looks like it's the It seems to be on initial run. Looks like retry() function gets called twice for some reason EDIT: I'm running Ember 4.12.3, and using this in a component - debugging shows directTrackedFunction is the one in use here |
shortened a bit, but it's essentially this class TimeOnTaskUsage extends Component<Signature> {
@service studentEvents!: StudentEventsService
fetchUsage = trackedFunction(this, () => {
return this.studentEvents.timeOnTaskUsage( // returns a promise
'writing_legends',
this.args.statsScope,
this.args.period,
)
})
<template>
{{#if this.fetchUsage.isPending}}
loading!
{{else if this.fetchUsage.isError}}
error!
{{else if this.fetchUsage.value}}
{{log this.fetchUsage.value}}
{{/if}}
</template>
} |
how are you causing the change to happen? statsScope changing? both args? something else? thanks! |
get statsScope(): StatsScope {
if (this.args.model.uiScope.scope === 'school') {
return { scope: 'school', ids: [this.args.model.uiScope.id] }
} else {
...
}
} But I think that's a red herring - I can still repro the error even when the tracked values are removed from the function, since the error occurs on first run. fetchUsage = trackedFunction(this, () => {
return this.studentEvents.timeOnTaskUsage( // returns a promise
'writing_legends',
{ scope: 'school', ids: ['1'] }, // this.args.statsScope,
'named-period:this-year', // this.args.period,
)
}) or even without any this usage fetchUsage = trackedFunction(this, async () => {
return await new Promise((res) => setTimeout(res, 1000))
}) The fact that your tests seem to work tells me that it's probably something unique to my setup, even though this is a fairly simple repro in my app :/ I will try to get this reproduced in some kind of playground |
ya know, I get the error now, too. So I think I fell for the apologies for the run around. |
no trouble at all, I'm just glad to help! You do so much cool work! I ended up coding up a potential repro in limber, though - but since it's using this addon before this PR fix, it doesn't show the error, but I was able to manually repro the bad behaviour by debugging in the console and running (and sure enough, if I instead run |
confirmed the updated fix works in my app too 🚀 |
1c16752
to
c982307
Compare
Investigation of #1010