TypeError:instances.map不是函数angular loopback

时间:2017-09-16 10:07:32

标签: angular typescript loopbackjs angular-loopback

我使用@ mean-expert / loopback-sdk-builder在angular 4.3.6上生成我的api,当我使用此调用时出现错误

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

当我在loopback explorer中尝试这个方法时,我得到了一组用户。

debug capture

这是'findUsersByRoles'由loopback sdk生成的函数

  public findUsersByRoles(roles: any, customHeaders?: Function): Observable<User[]> {
    let _method: string = "GET";
    let _url: string = LoopBackConfig.getPath() + "/" + LoopBackConfig.getApiVersion() +
    "/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))
    );
  }

这是控制台中的打印错误:

Capture link

我怀疑这可能是sdk构建器中的一个错误,因为角度项目是最近的,并且整体结构没有太多变化。

解决方案

正如我在答案中被告知的那样,问题是实例不是一个数组,为了解决这个问题,我必须在loopback模型的remoteMethod定义中设置属性root:true

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

2 个答案:

答案 0 :(得分:1)

instances是一个对象,正如您在调试捕获中看到的那样。它具有属性users,它是一个数组。因此,您需要在users数组上调用map函数。

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

答案 1 :(得分:0)

错误的原因是您在不是数组的变量上调用map,请确保控制日志instances变量以查看它是否确实包含数组。错误是告诉你map不是函数,因为你的变量不是任何数组,map是这个上下文中的数组函数。