Angular TypeError:无法读取 Promise subscribe() 中为 null 的属性“length”
2018-05-07
10934
我正在调用 API 端点并收到错误,但在使用 console.log 时我无法查看错误,因为我收到以下错误。还有其他方法可以获取错误吗?
错误
TypeError: Cannot read property 'length' of null
at http.js:109
at Array.forEach (<anonymous>)
at HttpHeaders.lazyInit (http.js:103)
at HttpHeaders.init (http.js:251)
at HttpHeaders.forEach (http.js:354)
at Observable._subscribe (http.js:2153)
at Observable._trySubscribe (Observable.js:172)
at Observable.subscribe (Observable.js:160)
at Object.subscribeToResult (subscribeToResult.js:23)
at MergeMapSubscriber._innerSub (mergeMap.js:132)
提供商
import { HttpClient } from '@angular/common/http';
import { Http, Headers , RequestOptions } from '@angular/http';
import { Injectable } from '@angular/core';
@Injectable()
export class GamesProvider {
// API url
apiUrl = 'http://xxxxx.com/api';
headers : any;
options: any;
this.headers = new Headers();
this.headers.append('Accept', 'application/json');
this.headers.append('Content-Type', 'application/json' );
this.headers.append('Authorization', 'Bearer' + this.token);
this.options = new RequestOptions({headers: this.headers});
getUsers(ex) {
return new Promise(resolve => {
this.http.get(this.apiUrl+'/api/online/'+ex, {headers: this.options}).subscribe(data => {
resolve(data);
}, err => {
console.log(err);
}).catch((err) => {
// Do messaging and error handling here
return Observable.throw(err)
});
});
}
2个回答
导致此错误的原因是您向 http 请求添加了一个标头,该标头的值为
null
。您没有在提供的代码中执行此操作,因此这种情况很可能发生在您的 http 拦截器中。
如果您的 http 拦截器向 每个 http 请求添加一个令牌,即使尚未设置令牌的值,或者拦截器未正确访问令牌变量,也很容易发生这种情况。
Joakim
2018-06-05
当标头中的任何值为
null
或
undefined
时,就会发生这种情况。
例如:
{ headers: this.options }
如果
this.options
类似于:
{ token : null }
您将收到此问题中提到的错误。
在这种情况下,您甚至不会看到由 angular http 生成的请求。
Sumit Chauhan
2019-01-12