Angular 返回数组在角4中未定义

Angular 返回数组在角4中未定义,angular,web-services,http,asynchronous,angular-httpclient,Angular,Web Services,Http,Asynchronous,Angular Httpclient,我从web服务获取数据,并尝试在我的服务中使用toPromise。web服务返回json对象下方 下面是我使用web服务响应的方法: 所以数据总是未定义的。那么我不能在我的组件中使用它 另一方面,我在下面尝试 上面的代码正确返回值。但它在加载视图后返回值。不是异步调用。希望您能提供帮助。如果您使用新的,则没有res.json方法。它将自动工作,只需按如下方式传递响应类型: returntestData() { const url:string = 'https://userportal/

我从web服务获取数据,并尝试在我的服务中使用toPromise。web服务返回json对象下方

下面是我使用web服务响应的方法:

所以数据总是未定义的。那么我不能在我的组件中使用它

另一方面,我在下面尝试

上面的代码正确返回值。但它在加载视图后返回值。不是异步调用。希望您能提供帮助。

如果您使用新的,则没有res.json方法。它将自动工作,只需按如下方式传递响应类型:

returntestData() {
    const url:string = 'https://userportal/api/company';

    return this.http.get<Users[]>(url)
        .toPromise()
        .then(data => {
            console.log(data)
            return data
        });
}
这还取决于界面用户。

在标记此问题时,您是否正在使用新的HttpClient?这里没有res.json方法,它会自动转换json。我想这里也有一个输入错误this.nhttp而不是this.http。
returntestData() {


const url:string = 'https://userportal/api/company';
this.nhttp.get(url)
      .toPromise()
      .then(res => <Users[]> res.json().data)
      .then(
        data => {
          console.log(data)
          return data
        }
      );
  }
getallCompanies(): Users[] {

let UsersDetails: Users[] = [];

const url:string = 'https://userportal/api/company';

this.http.get<[{Users}]>(url).subscribe(
  data => {
     for(var i=0;i<data.length;i++) {
      let newuser = new Companies(data[i]["username"],data[i]["id"],data[i]["isActive"],data[i]["joinDate"],data[i]["expireDate"],data[i]["appkey"],data[i]["masterkey"],data[i]["userurl"]);
      UsersDetails.push(newuser);
     }
     console.log("full data from service : "+ UsersDetails);
     return UsersDetails;

  },
  err => {
    console.log("error occured while calling to web service");
    console.log(err)
  }
);

return UsersDetails;


 }
returntestData() {
    const url:string = 'https://userportal/api/company';

    return this.http.get<Users[]>(url)
        .toPromise()
        .then(data => {
            console.log(data)
            return data
        });
}