{{#if this.searchTask.isRunning}}
Loading...
{{/if}}
{{#if this.searchTask.last.isSuccessful}}
{{#each this.searchTask.last.value as |result|}}
- {{result.name}}
{{/each}}
{{/if}}
{{#if this.searchTask.last.isError}}
{{this.searchTask.last.error.message}}
{{/if}}
}
```
**With debouncing for user typing:**
```glimmer-js
// app/components/autocomplete.gjs
import Component from '@glimmer/component';
import { restartableTask, timeout } from 'ember-concurrency';
class Autocomplete extends Component {
searchTask = restartableTask(async (query) => {
// Debounce user typing - wait 300ms
await timeout(300);
const response = await fetch(`/api/autocomplete?q=${query}`);
return response.json(); // Return value, don't set tracked state
});