NG02100 Angular Origin: On your device Last updated 15 Oct 2026

Angular: NG02100: InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe'

The async pipe received a plain object or array instead of an Observable or Promise.

Exact message you may see InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe'NG02100: InvalidPipeArgumentInvalidPipeArgument: '' for pipe 'AsyncPipe'for pipe 'AsyncPipe'InvalidPipeArgument: '[object Object],[object Object]' for pipe 'AsyncPipe'
Seen on: Angular TypeScript

Meaning

| async subscribes to an Observable or Promise. Passing already-resolved data (an array, an object, a string) throws. Remove the pipe for plain values, or make the property an Observable / Promise. A frequent cause is | async applied to the result of a subscribe() assignment.

Common causes

  • Property holds an array/object, not an Observable or Promise
  • Subscribed manually in the component and then used | async on the stored value
  • Service returns data synchronously in one branch and an Observable in another
  • Wrong variable bound (the value vs the $ stream)
  • *ngIf="user$ | async as user" where user$ is already a value

⚡ Quick fix

  1. Remove | async when the value is plain data
  2. Or keep the Observable (items$ = this.http.get(...)) and use | async
  3. Use of(value) when a stream is required

Detailed fix by platform

Angular

  1. Either items = signal<Item[]>([]) and @for (i of items(); track i.id), or items$ = this.api.list(); and @for (i of items$ | async; track i.id)

Code examples

Stream or value, not a mix

typescript
items$ = this.http.get<Item[]>('/api/items');     // template: @for (i of items$ | async; track i.id)
items: Item[] = [];                                // template: @for (i of items; track i.id)  (no async)

ngOnInit() { this.items$.subscribe(v => (this.items = v)); }   // fine, but then do NOT use | async on `items`

How to diagnose

  1. Type — Observable, Promise or plain value?
  2. Pipe — Is async applied to the stream?
  3. Mix — Manual subscribe plus async?

🔧 Still not fixed?

Many errors look alike. If the steps above didn’t solve it, one of these is probably what you’re facing:

Where this error sits

Origin: On your device. Errors that are often confused with or caused by this one (click to open):

EmptyError — RxJS: EmptyError: no elements in sequence (firstValueFrom / lastValueFrom on an empty Observable) (Angular)EmptyErrorexceeded maximum budget — Angular build: Error: bundle initial exceeded maximum budget. Budget 1.00 MB was not met by 120.00 kB with a total of 1.12 MB (Angular)exceeded maximum budg…NG02100 — Angular: NG02100: InvalidPipeArgument: 'Unable to convert "x" into a date' for pipe 'DatePipe' (Angular)NG02100NG02200 — Angular: NG02200: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays (Angular)NG02200NG8004 — Angular: NG8004: No pipe found with name 'async' / 'date' / 'translate' — pipe not imported (Angular)NG8004Schema validation failed with the following errors — Angular CLI: Schema validation failed with the following errors: Data path "" must NOT have additional properties(xyz) (Angular)Schema validation fai…You provided 'undefined' where a stream was expected — RxJS: TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable. (Angular)You provided 'undefin…NG02100

Explore the map of this error Full error map →

🧠 Still stuck? Analyze your error

Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.

💬 What worked for others

No tips yet — did something else fix this for you?

Share what worked for you

Tips are checked by an editor before they appear. Links are removed.