2015-11-02 98 views
1

我在电子中使用angular.js以及node-orm与数据库交谈。节点ORM发现/获取功能是异步,所以我试图用承诺来获得数据服务,像这样:Promise in angular.js + node.js/electron不起作用

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的开发工具查看这些值。

回答

1

承诺仍然是异步操作,所以title方法返回一个承诺对象,而不是实际的results。您需要使用承诺可接受的API来提供将在数据可用时调用的回调:

app.controller("GreetController", function($scope, SearchService) { 
    SearchService.title('test').then(function(data) { 
     $scope.units = data; 
    }); 
});