如何从已解决的承诺中获取价值

时间:2015-05-11 12:55:46

标签: angularjs promise

我是Angular的新手,并且很难理解如何从已解决的承诺中获取价值。我使用$ q.all([element1。$ promise,e2。$ promise])。我得到了一个json对象的element1。对于,element2是一个包含2.0的标量。我尝试了元素[1]就像元素[0],但它不包含任何属性,所以我不知道如何获得值。我试过.val,.data等。我知道web api和angular都得到2.0。

              resolve: {
            accountResource: "accountResource",
            account: function(accountResource, $stateParams, $q) {

              var info = accountResource.get({ accountId: $stateParams.accountId });
              var currentBalance = accountResource.getCurrentBalance({ accountId: $stateParams.accountId });

              return $q.all([info.$promise, currentBalance.$promise]);
            }

    vm.account = account[0];
    vm.currentBalance = account[1];

资源功能

    function accountResource($resource) {
    var webApiUrl = "https://localhost:44301";
    return $resource(webApiUrl + '/api/account/:accountId', {}, {
        get: {
            method: 'GET'
        },          
        query: {
            method: 'GET', 
            isArray: true, 
            url: webApiUrl + '/api/account/search/:queryMethod/:queryString'
        },
        getCurrentBalance: {
            method: 'GET', 
            url: webApiUrl + '/api/account/getcurrentbalance/:accountId'
        }
    });
}

1 个答案:

答案 0 :(得分:0)

你可以调用$q.all喜欢这个(使用字典而不是数组):

return $q.all({info: info.$promise, currentBalance: currentBalance.$promise})

之后以这种方式获取信息:

vm.account = account.info;
vm.currentBalance = account.currentBalance;

尝试重写您的资源:

function accountResource($resource) {
var webApiUrl = "https://localhost:44301";
// Add second parameter {accountId: "@accountId"}
return $resource(webApiUrl + '/api/account/:accountId', {accountId: "@accountId"}, {
    get: {
        method: 'GET'
    },          
    query: {
        method: 'GET', 
        isArray: true, 
        url: webApiUrl + '/api/account/search/:queryMethod/:queryString'
    },
    getCurrentBalance: {
        method: 'GET', 
        url: webApiUrl + '/api/account/getcurrentbalance/:accountId'
    }
});

}

<强>更新

您可以将transformResponse属性添加到getCurrentBalance中的accountResoure功能。并将您的价值从API转换为json格式。

getCurrentBalance: {
    method: 'GET', 
    url: webApiUrl + '/api/account/getcurrentbalance/:accountId',
    transformResponse: function (balanceFromApi) { 
        return { balance: balanceFromApi }; 
    }
}

最后你可以获得信息,喜欢这个:

vm.account = account.info;
vm.currentBalance = account.balance;

我用$httpBackend服务测试了它,现在一切都很好。希望这会有所帮助。