angular - Ionic 4 http.get.subscribe 不存储价值
问题描述
所以这可能是重复的什么的,但到目前为止我找不到任何简单明了的东西,所以我只想问。
我有一些简单的代码如下:
fetchData() {
let dataArray: Array<any> = [,,,];
this.prepareDataRequest()
.subscribe(data => {
this.dataArray[0] = JSON.parse(JSON.stringify(data["results"]));
this.dataArray[1] = Object.keys(JSON.parse(JSON.stringify(data["results"]))).length;
console.log(this.dataArray[0]);
},
err => {
this.dataArray[2] = `Error --> Status: ${err.status}, Message: ${err.statusText}`;
});
return this.dataArray;
}
prepareDataRequest() {
const dataUrl = 'https://randomuser.me/api/?results=10&inc=gender,name,nat,email,phone,id';
return this.http.get(dataUrl);
}
完美的console.log(this.dataArray[0]);
作品,但回报是空的。到目前为止,我发现这是因为它在return this.dataArray;
获取项目之前执行。
但是我该如何解决呢?有没有一种简单的方法可以说“等待所有东西都存储好后再回来”?还是我这样做完全错误(可能是xD)?
我已经尝试了一些异步和东西的东西,但我对这个有点陌生,所以一切都不太顺利。
解决方案
您在订阅范围之外返回结果,因此 dataArray 尚未初始化。
您需要更改 fetchData() 方法,如下所示:
fetchData() {
let dataArray: Array<any> = [, , ,];
this.prepareDataRequest()
.subscribe(data => {
this.dataArray[0] = JSON.parse(JSON.stringify(data["results"]));
this.dataArray[1] = Object.keys(JSON.parse(JSON.stringify(data["results"]))).length;
console.log(this.dataArray[0]);
// return your dataArray here
return this.dataArray;
},
err => {
this.dataArray[2] = `Error --> Status: ${err.status}, Message: ${err.statusText}`;
});
}
另外,当您只使用 dataArray 字段时,我对 dataArray 局部变量的声明有点困惑。也许那里不需要它。
推荐阅读
- javascript - Vue 3 上的路由器视图无法捕获来自子级的事件
- r - 以特殊方式获取长格式
- python - 学生ID的数据框组
- java - 我创建了一个类,我还想创建一个接口来插入值而不是代码本身。我怎样才能做到这一点?
- python - Mass DM 机器人工作正常,现在它不会发送消息
- tensorflow - 如何连接两个在一个维度上大小相同但在另一个维度上大小不同的张量流张量?
- flutter - 当应用程序热重启时,列的子项的长度加倍
- django - 我应该为每个页面创建一个应用程序吗?(姜戈)
- facebook - 使用 facebook api,我如何获取通过从我的网站共享内容创建的帖子的帖子 ID?
- c# - 如何反序列化这个 JSON 对象?