angular - Ionic 3 - 类型“{}”上不存在属性“数据” - 尝试在设备上运行时
问题描述
尝试在 android 设备上运行 Ionic 3 App 时出现该错误。在浏览器上工作正常,但我想在运行/部署到设备时会有额外的验证层。
这是有问题的代码:
getHomephones(auth_token) {
return new Promise(resolve => {
this.apiProvider.getRemoteHomephones(auth_token).then(result => {
this.createOrUpdateHomephones(result.data).then(response => {
resolve(response);
});
});
});
}
它调用 api 提供程序并获得一组电话作为回报(或者至少这是目标):
getRemoteHomephones(auth_token) {
return new Promise(resolve => {
this.httpClient.get(this.apiUrl + "remote_homephones", {
headers:{"X-USER-AUTH-TOKEN": auth_token}
}).subscribe(response => {
resolve(response);
}
});
}
我猜问题出在 api 端的类型声明上,但我似乎没有找到正确的方法来声明它。
非常感谢任何帮助或提示。
解决方案
现在和将来对您有帮助的提示。如果此代码将在生产中部署,我没有详细信息,但我们开始吧:
- 当 HTTP 调用失败时,getRemoteHomephones也应该处理错误情况。(拒绝承诺,在调用者中捕获错误)
Angular 喜欢Typescript,所以你也应该开始使用它。如果存在打字稿错误,该解决方案将不会运行,因此您将避免很多麻烦。(特别是在这里,您应该定义一个接口,该接口将映射到您的 API 响应为
getRemoteHomephones(auth_token) : 电话号码[ ])
- 在将结果作为result.data传递给createOrUpdateHomephones之前,添加额外的验证以确保对象存在并且数据属性可用。
祝你好运!
推荐阅读
- javascript - HTML添加CRUD按钮将获得特定的东西
- reactjs - 如何知道组件在反应中返回 null 或元素
- selenium - 如何从检查元素而不是页面的源代码中抓取网站的 href(随会话而变化)
- java - 如何从 Bundle 中获取特定数据?
- .net - 从 C# 访问和管理 Azure 资源
- python - 如何从文件中解码编码为base64的行?
- batch-file - 如何测试是否将新文件添加到目录并执行某些操作
- amazon-web-services - API Gateway S3 集成签名与空白文件夹名称不匹配
- java - 将时间戳解析为此日期字符串
- plsql - 需要帮助找出PL sql包中SQL注入的根本原因