使用promise更新Json值

时间:2015-11-10 12:01:02

标签: javascript json angularjs angular-promise

我想在Json中填充一些使用angular-promises计算的值,这些值应该在某些事件之后更新。 我试图调用工厂产生值,例如下面的东西,并试图调用负责计算值的函数GetWeeklyVal和GetDailyVal:

string-array

在我的控制器里我有:

this.salesList = 
    {"sales":[
        {   "id":"A1", "dailyValue": GetDailyVal('A1'), "weeklyValue": GetWeeklyVal('A1')},
        {   "id":"A2", "dailyValue": GetDailyVal('A2'), "weeklyValue": GetWeeklyVal('A2')}
    ]}

但它没有用。值保持为零,这是应用程序中的默认值。 为什么价值没有更新,什么是更好的解决方案?

更新

这是我调用计算函数的代码部分:(我跳过部分来获取基于此处传递的id的值)

$scope.sales= salesServices.salesList.sales;

这是工厂

function GetDailyVal(id){
    var dValue = 0;
    salesService.getSales();
    dValue = salesService.totalAmount;
    return dValue;
}

2 个答案:

答案 0 :(得分:1)

我认为您的代码中存在一些错误。

我在这里给出一些示例代码。我想这会对你有帮助。

这是我的一个应用程序中的示例代码。检查一下。

service.factory('Settings', ['$http','$q', function($http,$q) {
    return {
            AcademicYearDetails : function(Details) {
                return $http.post('/api/academic-year-setting', Details)
                .then(function(response) {
                    if (typeof response.data === 'object') {
                        return response.data;
                    } else {
                        return $q.reject(response.data);
                    }

                }, function(response) {
                    return $q.reject(response.data);
                });
            },
            newUser : function(details) {
        return $http.post('/api/new-user', details);
      }

} }]);

答案 1 :(得分:0)

它不起作用的原因是:

dailyValue: GetDailyVal('A1')

在这里,GetDailyVal对api进行异步ajax调用。要处理异步请求,您必须在GetDailyVal函数中按如下方式返回一个promise:

function GetDailyVal() {
    salesService.getSales().then(function(data) { //promise
        dValue = salesService.totalAmount;
        return dValue;
    })
}

需要为weeklyValue做同样的事情。