我正在创建一个离子应用程序,尤其是在特定的场景中当从列表(从JSON数据数组生成)中选择一名员工时,他的详细信息将从这里显示
var employees=[{"id":325,"firstName":"James","lastName":"King"、"managerId":0、"manager Name":"、"reports":4、"title":"总裁兼首席执行官"、"部门":"公司"、"手机":"617-000-0001","办公电话":"781-000-0001,"电子邮件":"jking@gmail.com","城市":"马萨诸塞州波士顿","图片":"詹姆斯金.jpg","twitterId":"@fakejking","博客":"http://coenraets.org"}……
我所需要的只是找到ID的索引来显示完整的对象。
findById: function(employeeId) {
var deferred = $q.defer();
var searchValue = {'id': employeeId };
index = -1;
_.each(employees, function(data, idx) {
if (_.isEqual(data, searchValue)) {
index = idx;
return;
}
});
var employee = employees[index];
deferred.resolve(employee);
return deferred.promise;
},
为此,我使用的是这个函数,它不在_内部使用调试器。每个函数
请告诉我我错在哪里了。
它不会起作用,因为表达式_.isEqual(employees[xxx], {id: 325})
永远不会返回匹配项。
相反,使用_.find
方法
findById: function(employeeId) {
var employee = _.find(employees, {id: employeeId});
return $q.when(employee);
}
我认为您可以稍微简化您的函数,因为您使用的是lodash:
findById: funtion(employeeId) {
return _.findWhere(employees, {id : employeeId});
}
此外,我看不出有任何理由在这里使用承诺,但为了遵循这个概念,你可以尝试一下:
findById: funtion(employeeId) {
var deferred = $q.defer();
$timeout(function() {
var employee = _.findWhere(employees, {id : employeeId});
if (found !== undefined) {
deferred.resolve(employee);
} else {
deferred.reject();
}, 0);
return deferred.promise;
}
您需要在resolve()
或reject()
之前返回promise deferred.promise
,这样您就可以在被调用者中等待它。
希望能有所帮助!
我不知道你是否真的需要索引。制定一个解决方案,在找到数据的那一刻返回员工,会更好、更短。你也应该跳出循环。
如果您的调试器没有在_内部跳转,则可能您的employees数组为空。你可以试试这样的东西:
findById: function(employeeId) {
var deferred = $q.defer();
// deferred should be inside the scope of _.each
// because it is defined here
var searchValue = {'id': employeeId };
//index = -1;
// check your data here
// for example console.log(employees.length)
// or make a breakpoint here and check employees
_.each(employees, function(data, idx) {
// make a console.log(idx) here to check your data
if (_.isEqual(data, searchValue)) {
deferred.resolve(data);
return deferred.promise;;
}
});
},