我正在尝试访问类型(低位标记)但没有成功
我的代码落在开头(当我检查长度时):
Object.data.ServiceData.modelObjects.length;
(我希望得到modelObjects
对象的长度)
我得到了按摩:
错误:angular.js:13920 TypeError:无法读取属性'modelObjects' 未定义的
这就是我使用它的方式:
function _getIds() {
var path = vm.package.path;
var SERVER_PATH = Config.SERVER_PATH;
return $q(function (resolve, reject) {
$http.post(SERVER_PATH + '/getLastGetRelated', { path: vm.package.path })
.then(
function (success) {
resolve(success);
},
function (err) {
reject(err);
})
});
}
this.camera = function() {
_getIds().then(function(ids){
console.log(Object.ServiceData.modelObjects.length);
readJson(ids);
})
}
答案 0 :(得分:0)
我的代码落在开头(当我检查长度时):
Object.data.ServiceData.modelObjects.length;
[...]
console.log(Object.ServiceData.modelObjects.length);
实际上,你正在检查:
Object.ServiceData.modelObjects.length
而不是:
Object.data.ServiceData.modelObjects.length;
查看数据外观的最简单方法是暂时更改:
console.log(Object.ServiceData.modelObjects.length);
为:
console.log(JSON.stringify(Object));
但请记住,Object
是JavaScript中的内置函数(实际上是构造函数),因此不太可能包含您的数据。
另外,这个:
return $q(function (resolve, reject) {
$http.post(SERVER_PATH + '/getLastGetRelated', { path: vm.package.path })
.then(
function (success) {
resolve(success);
},
function (err) {
reject(err);
})
可以写成:
return $http.post(SERVER_PATH + '/getLastGetRelated', { path: vm.package.path });
一般建议:
现在,如果您不希望程序在访问可能存在或可能不存在的属性时崩溃,您可以使用:
console.log(Object && Object.data && Object.data.ServiceData
&& Object.data.ServiceData.modelObjects
&& Object.data.ServiceData.modelObjects.length);
或使用lodash:
console.log(_.get(Object, 'data.ServiceData.modelObjects.length'));
或使用hoek:
console.log(hoek.reach(Object, 'data.ServiceData.modelObjects.length'));
请参阅:
总之,您的代码存在很多问题。您很可能对Promises的工作方式,获得的数据,变量以及如何访问所需部件感到困惑。
我的建议是阅读有关promises的更多信息,检查从API获得的数据,并从头开始仔细编写代码。不幸的是,没有人能够像现在一样在表单中为您修复代码,因为我们不知道您的数据是什么样的,以及您想要用它做什么。
答案 1 :(得分:0)
这可能不是问题的答案,但我想指出一件事。 http默认情况下将响应作为promise返回。但是在这里,手动创建了承诺以捕获已经承诺的响应。这是不必要的。只需返回http请求,而不创建像这样的新承诺
function _getIds() {
var path = vm.package.path;
var SERVER_PATH = Config.SERVER_PATH;
return $http.post(SERVER_PATH + '/getLastGetRelated', {
path: vm.package.path
})
}
this.camera = function() {
_getIds().then(function(ids) {
console.log(Object.ServiceData.modelObjects.length);
readJson(ids);
})
}