Angular 8:TypeError:发现不可调用@@iterator

Bha*_*upe 13 typescript angular

当我发送http get请求时,我收到这些错误TypeError: Found non-callable @@iterator,但它Angular 7不在Angular 8.

我的组件文件
component.ts文件中我调用了服务getCodes()

onSubmit(){
 this.service.getCodes('localhost/Aggregator/getCodes').subscribe (result=>{
 }, error =>{
    console.log(error);
 })
}
Run Code Online (Sandbox Code Playgroud)

我的拦截器文件
当我发送请求时,我已经通过拦截器传递了这些标头

@Injectable()
    export class Interceptor implements HttpInterceptor {
      sessionParam:any = {
        userParam: {
          'a':66,
          'b':101,
          'c':'0201',
          'd':'Y',
          'e':'Y',
          'h':'2019/02/22',
          'f':'Y',
          'g':12
        }
      }

      intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        let headers = new HttpHeaders();
        for (var val in this.sessionParam) {
          Object.keys(this.sessionParam[val]).forEach(key => {
            headers = headers.append(key,this.sessionParam[val][key]);
          });
        }
        request = request.clone({
          headers: headers
        })
        return next.handle(request);
      }
    }
Run Code Online (Sandbox Code Playgroud)

我的服务文件

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable, of } from 'rxjs';
import { delay, map } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class ProvidersService {

  constructor(private http:HttpClient) { }

  public getCodes(url, apiParam=null):Observable<any>
  {
    return this.http.get(url, {params: apiParam});
  }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

TypeError: Found non-callable @@iterator
at HttpHeaders.applyUpdate (http.js:301)
at http.js:245
at Array.forEach (<anonymous>)
at HttpHeaders.init (http.js:241)
at HttpHeaders.forEach (http.js:339)
at Observable._subscribe (http.js:1826)
at Observable._trySubscribe (Observable.js:42)
at Observable.subscribe (Observable.js:28)
at subscribeTo.js:20
at subscribeToResult (subscribeToResult.js:7)
Run Code Online (Sandbox Code Playgroud)

任何解决方案?

Dav*_*vid 18

当您设置标头非字符串值时会发生此错误。为了解决将所有标头值转换为字符串。


Fel*_*lix 9

我已经从 A7 升级到 A8 并遇到了同样的问题。

在我的情况下,代码在我使用解构赋值的一行失败:

return this.fooPipe.transform(foo, ...args);

-> Error: Found non-callable @@iterator
Run Code Online (Sandbox Code Playgroud)

它帮助我改变tsconfig.json了:

"target": "es2015"
Run Code Online (Sandbox Code Playgroud)

"target": "es5"
Run Code Online (Sandbox Code Playgroud)


Fra*_*aga 7

就我而言,我还尝试解构一个对象:

console.log('state: ', ...state)
Run Code Online (Sandbox Code Playgroud)

但我忘记创建对象了。解决方案是将其解构为对象:

console.log('state: ', {...state})
Run Code Online (Sandbox Code Playgroud)


小智 3

无法发表评论,但我建议您查看headers对象中最终的数据。headers也许您可以记录该行之前的内容return next.handle(request);。例如,您可能会发现,提供的值之一this.sessionParam[val][key]不是字符串,而一个简单的值this.sessionParam[val][key] + ''就可以解决问题......