Angular 2 异常:类型错误:“调用者”、“被调用者”和“参数”属性可能位于严格模式函数或参数对象上

Fra*_*ría 8 javascript typescript angular2-services angular

我在 Angular 2 中遇到问题,我知道这是一个反复出现的问题,但我找不到解决方案。我创建了一个从另一个组件调用的服务,没有问题。

问题出在服务中,我正在尝试进行 http POST 并获取错误:

[异常:TypeError:“caller”、“callee”和“arguments”属性可能无法在严格模式函数或 Function.remoteFunction 调用的参数对象上访问**

错误捕获
完整错误捕获

显然,错误是在handleErrorObservable中给出的,因为post也没有执行,查看Chrome中的网络选项卡,我没有看到任何对API的POST调用。

这是我的服务代码。

import { Injectable } from '@angular/core';
import { Http, Response, RequestOptions } from '@angular/http';
import { Observable } from "rxjs/Observable";
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
import { User } from "./user";
import { HttpHeaders } from '@angular/common/http';
import { Headers  } from '@angular/http';

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/toPromise';

@Injectable()
export class RegisterService {
     usersUrl: 'http://localhost:8080/TrabajoPromocion/users/';  
    constructor(private http:Http) { }
 
    addBookWithObservable( ): Observable<User> { 
        let body = JSON.stringify({   
            "fullname": "a",
            "username": "h",
            "password": "3",
            "email": "33"
        }); 
        
        let headers = new Headers({ 'Content-Type': 'application/json' });
        console.log('3');
        let options = new RequestOptions({ headers: headers });
         return this.http.post(this.usersUrl, body, options)
                       .map(this.extractData)
                       .catch(this.handleErrorObservable);             
    }
     
    private extractData(res: Response) { 
        let body = res.json();
            return body || {};
    }

    private handleErrorObservable (error: Response | any) { 
        console.error(error.message || error);
        return Observable.throw(error.message || error);
    }
}
Run Code Online (Sandbox Code Playgroud)

感谢大家,欢迎任何帮助。

Bor*_*nov 7

根据我所看到的,我可以假设您的请求未发送的原因是您没有调用可.subscribe观察到的任何地方。Observables 只是函数,在您调用它们之前它们不会被执行。这就是 subscribe 的作用 - 调用函数,然后所有运算符也被执行。

您在开发人员工具中看到的并不是请求中的实际错误,而是向您发送的消息,表明您无法在开发人员工具中查看函数的参数或调用者或被调用者。

因此,解决方案是简单地添加subscribe调用(或者异步管道也可以完成这项工作)。