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

时间:2017-10-30 12:37:25

标签: angular web-services http asynchronous angular-httpclient

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

[
  {
    "username": "jack",
    "joinDate": "2017-10-28T00:00:00",
    "expireDate": "2017-10-31T00:00:00",
    "isActive": true,
    "userurl": "https://dummy.com",
    "masterkey": "77uyerue987930000",
    "appkey": "hdhfjd98984300000",
    "id": 49
  },
  {
    "username": "paul",
    "joinDate": "2017-10-28T00:00:00",
    "expireDate": "2017-10-31T00:00:00",
    "isActive": true,
    "userurl": "https://dummy.com",
    "masterkey": "98dfdf88",
    "appkey": "89fdf98",
    "id": 49
  }
]
  

然后我的方法是使用来自网络服务的响应:

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;


 }

上面的代码正确返回值。但它在视图加载后返回值。不是async调用。希望你的帮助。

1 个答案:

答案 0 :(得分:1)

如果您使用新的HttpClient,则没有res.json方法。它会自动运行,只需传递响应类型:

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

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

它还取决于接口Users