我在电子中使用angular.js和node-orm来与数据库通信。 Node-orm查找/获取函数是异步的,所以我尝试使用Promises来获取服务中的数据,如下所示:
app.service('SearchService', function($q) {
this.title = function(token) {
var deferred = $q.defer();
Unit.find({}).where("unit_title LIKE ?", ['%'+token.toUpperCase()+'%']).run(function(err, results) {
if (err) {
return console.error('error running title query', err);}
deferred.resolve(results);
});
return deferred.promise;
}
});
app.controller("GreetController", function($scope, SearchService) {
$scope.units = SearchService.title('test');
});
目标是角度翻译视图中的承诺。:
<div ng-controller="GreetController">
<ul>
<li ng-repeat="unit in units">{{unit.title}}</li>
</ul>
</div>
然而它不起作用。我知道Promises已解决,因为我可以将它们登录到控制台并使用Chromium的开发工具查看值。
答案 0 :(得分:1)
Promise仍然是异步操作,因此title
方法返回一个promise对象,而不是实际的results
。您需要使用promise then-able API来提供将在数据可用时调用的回调:
app.controller("GreetController", function($scope, SearchService) {
SearchService.title('test').then(function(data) {
$scope.units = data;
});
});