2017-09-16 2 views
0

Ich benutze die @ Mean-Experte/Loopback-SDK-Builder, um meine API auf eckigen 4.3.6 zu generieren und ich bekomme einen Fehler, wenn ich diesen AnrufTypeError: instances.map ist keine Funktion eckige Loopback

verwende
this._userApi.findUsersByRoles([{'name':'cliente'}]).subscribe((users: User[]) => { 
    this.users = users; 
}, (err) => {console.log(err) }) 

Wenn ich diese Methode im Loopback-Explorer versuche, bekomme ich eine Reihe von Benutzern.

debug capture

Dies ist die Funktion vom sdk Loopback erzeugt 'findUsersByRoles'

public findUsersByRoles(roles: any, customHeaders?: Function): Observable<User[]> { 
    let _method: string = "GET"; 
    let _url: string = LoopBackConfig.getPath() + "/" + LoopBackConfig.getApiVersion() + 
    "https://stackoverflow.com/users/findUserByRoles"; 
    let _routeParams: any = {}; 
    let _postBody: any = {}; 
    let _urlParams: any = {}; 
    if (typeof roles !== 'undefined' && roles !== null) _urlParams.roles = roles; 
    let result = this.request(_method, _url, _routeParams, _urlParams, _postBody, null, customHeaders); 
    return result.map((instances: Array<User>) => 
     instances.map((instance: User) => new User(instance)) 
    ); 
    } 

Und das ist die gedruckte Fehler in der Konsole:

Capture link

Ich vermute, dass Dies könnte ein Fehler im SDK-Builder sein, da das eckige Projekt neu ist und nicht viele Änderungen hatte n der Gesamtstruktur.

Lösung

Wie ich in den Antworten gesagt worden ist, ist das Problem, dass Fälle nicht ein Array ist, dieses Problem zu beheben i die Eigenschaft root gesetzt hatte: im Loopback-Modell wahr auf der remoteMethod Definition

returns: { 
     arg: 'users', 
     type: 'array', 
     root : true 
     } 
+0

"Ich bekomme eine Reihe von Benutzern" sind Sie sicher? Was bedeutet 'console.log (Instanzen)' in 'result.map' zu drucken? – echonax

+0

Ich verstehe nicht Ihren letzten Kommentar, aber ich denke nicht typeof 'Instanzen' ist 'Array ' – echonax

+0

ich aktualisierte den Wert der Intents – Edlop

Antwort

1

instances ist ein Objekt, wie Sie in der Debug-Erfassung sehen. Es hat die Eigenschaft users, die ein Array ist. Sie müssen also die Kartenfunktion auf dem Array users aufrufen.

instances.users.map((instance: User) => new User(instance)); 
0

der Grund für den Fehler ist, dass Sie map auf die Variable aufrufen, die kein Array ist, stellen Sie sicher, instances Variable Konsole anmelden, um zu sehen, ob es wirklich ein Fehler enthält Array sagt Ihnen, dass map ist keine Funktion, da Ihre Variable kein Array ist und map Array-Funktion in diesem Kontext ist.

+0

Ich fügte hinzu, eine Debug-Erfassung zeigt den Wert der Instanzen – Edlop

+0

Sie sehen in der Konsole das instances ist ein Objekt, das das Array von Benutzern enthält. Daher sollten Sie 'instances.users.map' anstelle von' instances.map' versuchen –

Verwandte Themen