angular - Egenskapen 'forEach' finns inte på typen 'Object'
Jag kan verkligen inte förstå varför jag inte kan loopa över svaret från detta HTTP-anrop. Av någon anledning klagar det på att typen av data är ett objekt, men när jag loggar det i konsolen ser jag en array som jag förväntar mig.
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { URLSearchParams } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/forkJoin';
promises.push(Observable.create(observer => {
this.http.post(`items/event/${this.event.auction_code}`, body.toString(), {
headers: new HttpHeaders().set('Content-Type', 'application/X-www-form-urlencoded' ),
}).subscribe(data => {
var classifiedData;
data.forEach((item)=>{
classifiedData.push(new Item(item));
});
observer.next(data);
observer.complete();
},error => {
observer.throw(error);
});
}));
...
Observable.forkJoin(promises).subscribe(results => {
results.forEach((result,i)=>{
data.content.template[i].data = result;
});
});
Redigera:
Console.log visar mig detta
Redigera: 2
Jag har också en interceptorsuppsättning, kan detta orsaka det?
@Injectable()
export class NoopInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const duplicate = req.clone({
url: `${environment.apiUrl}/${req.url}`,
params: req.params.set('key', environment.apiKey)
});
return next.handle(duplicate);
}
}
Svar #1
Det kräver att du ger det en tydlig typ för förfrågan på följande sätt:
this.http.post<any[]>('...
Enligt Angular HttpClient Guide vet HttpClient inte vad det är efter att ha parsat det från JSON, så det antar Object som typ för svaret, vilket gör att TypeScript klagar på det.
