javascript - Angular 2 Undantag: TypeError: 'caller', 'callee' och 'arguments' egenskaper kan inte användas på funktioner i strikt läge eller på arguments-objekt


Jag har ett problem i Angular 2, jag vet att detta är ett återkommande problem, men jag kunde inte hitta lösningen. Jag har skapat en tjänst som kallas från en annan komponent, det är inget problem där.

Problemet var i tjänsten, jag försöker göra en HTTP POST och får ett fel:

[Undantag: TypeError: 'caller', 'callee' och 'arguments'-egenskaper får inte nås på strikt läge-funktioner eller arguments-objekt för anrop till dem på Function.remoteFunction**

felupptagning
komplett felupptagning

Tydligen ges felet i handleErrorObservable, eftersom posten inte heller körs, och när jag tittar på nätverksfliken i Chrome ser jag inget POST-anrop till API:et.

Här är min servicekod.

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);
    }
}

Tack till alla, all hjälp är välkommen.

Svar #1

Baserat på vad jag har sett kan jag anta att anledningen till att din begäran inte skickas är att du inte anropar .subscribe någonstans på ditt observerbara. Observerbara är bara funktioner och de körs inte förrän du anropar dem. Det är vad subscribe gör - anropar funktionerna och alla operatorer körs också då.

Det du ser i utvecklarverktygen är inte det faktiska felet från förfrågan, det är meddelandet till dig att du inte kan se argumenten eller anropande eller den anropade funktionen i utvecklarverktygen.

Så lösningen är helt enkelt att lägga till subscribe-anropet (eller async pipe skulle också göra jobbet).

Relaterade artiklar