Angularjs等到REST API返回数据

时间:2014-10-30 13:11:47

标签: angularjs promise angular-routing trello

我正在使用Trello API,它不会返回承诺。它有回调函数。我想写一个包装器,它将等待回调执行并返回数据。  我写了下面的代码:

 function getLoggedInMember() {
    var deferred = $q.defer();
    Trello.members.get("me", deferred.resolve);
    deferred.promise.then(function (user) {
        return user;
    });
}

此功能在我的会员服务中。以下是我的routeConfig:

angular.module('trelloDashboard').config(['$routeProvider', function ($routeProvider) {
$routeProvider
 .when('/', {
     templateUrl: 'Views/Login.html',
     controller: 'LoginController'
 })
 .when('/Dashboard', {
     templateUrl: 'Views/Dashboard.html',
     controller: 'DashboardController',
     resolve: {
         user: function (MemberService) {
             return MemberService.getLoggedInMember();                 
         }
     }
 });}]);

这显然不起作用。有没有办法实现我在这里尝试做的事情? 谢谢。

3 个答案:

答案 0 :(得分:0)

尝试添加

    deferred.promise.then(function (user) {
            return user;
        },function(error){
    console.log("Error");
    console.log(error);
    //ur return statement
    });

答案 1 :(得分:0)

未经测试,但请尝试:

 .when('/Dashboard', {
     templateUrl: 'Views/Dashboard.html',
     controller: 'DashboardController',
     resolve: {
         user: MemberService.getLoggedInMember
     }

但是你的getLoggedInMember函数应该返回一个承诺。

根据角度文档:

  

resolve - {Object。=} - 应该注入控制器的可选依赖关系图。如果这些依赖项中的任何一个是promise,路由器将等待它们全部被解析或者在实例化控制器之前被拒绝。如果成功解决了所有promise,则会注入已解析的promise的值并触发$ routeChangeSuccess事件。如果任何promise被拒绝,则触发$ routeChangeError事件。

答案 2 :(得分:0)

这是有效的!

  function getLoggedInMember() {
    var deferred = $q.defer();
    Trello.members.get("me", function(user){ deferred.resolve(user); });
    return deferred.promise;
}

路由配置无需更改。 谢谢,@ Benjamin:)