2015-11-02 34 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; 
    }); 
});