Skip to content

Service cannot be used before helper #1085

@MichalBryxi

Description

@MichalBryxi

The problem

Given code:

import Component from '@glimmer/component';
import fileQueue from 'ember-file-upload/helpers/file-queue';

export default class Foo extends Component {
      @service fileQueue;

      <template>
       {{! Block A }}
        <ul>
          {{#each this.fileQueue.files as |file|}}
            <li>
              {{file.name}}
            </li>
          {{/each}}
        </ul>
        
        {{! Block B }}
        {{#let (fileQueue) as |queue|}}
          <label>
            <input type='file' {{queue.selectFile}} hidden />
            Select File
          </label>
        {{/let}}
      </template>
}

The app will fail with:

ember.js:626 Uncaught (in promise) Error: Assertion Failed: You attempted to update `_value` on `TrackedStorageImpl`, but it had already been used previously in the same computation.  Attempting to update a value after using it in a computation can cause logical errors, infinite revalidation bugs, and performance issues, and is not supported.

`_value` was first used:

- While rendering:
  -top-level
    application
      index
        (unknown template-only component)
          (result of a `unknown` helper)
            (result of a `unknown` helper)
              (result of a `unknown` helper)
                false.files
  • Curiously enough, if the Block A and Block B are swapped, the app works just fine

Versions

  • "ember-file-upload": "^9.1.0",
ember --version
ember-cli: 5.4.1
node: 20.17.0
os: darwin x64

pnpm --version
9.9.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions