Javascript 用承诺更新Json值

Javascript 用承诺更新Json值,javascript,json,angularjs,angular-promise,Javascript,Json,Angularjs,Angular Promise,我想在Json中填充一些用角度承诺计算的值,这些值应该在某些事件后更新。 我尝试调用生成值的工厂,例如下面这样的函数,并尝试调用负责计算值的函数GetWeeklyVal和GetDailyVal: this.salesList = {"sales":[ { "id":"A1", "dailyValue": GetDailyVal('A1'), "weeklyValue": GetWeeklyVal('A1')}, { "id":"A2", "dai

我想在Json中填充一些用角度承诺计算的值,这些值应该在某些事件后更新。 我尝试调用生成值的工厂,例如下面这样的函数,并尝试调用负责计算值的函数GetWeeklyVal和GetDailyVal:

this.salesList = 
    {"sales":[
        {   "id":"A1", "dailyValue": GetDailyVal('A1'), "weeklyValue": GetWeeklyVal('A1')},
        {   "id":"A2", "dailyValue": GetDailyVal('A2'), "weeklyValue": GetWeeklyVal('A2')}
    ]}
在我的控制器中,我有:

$scope.sales= salesServices.salesList.sales;
但它不起作用。值保持为零,这是应用程序中的默认值。 为什么不更新这些值?有什么更好的解决方案

更新

这是我调用计算函数的代码部分:(我跳过这一部分,根据这里传递的id获取值)

这是工厂

.factory('salesService', ['$http', '$q'],
function salesInvoiceService($http, $q) {

    var service = {
        sales: [],
        getSales: getSales,
        totalAmount: 0
    };
    return service;

    function getSales() {
        var def = $q.defer();
        var url = "http://fooAPI/salesinvoice/SalesInvoices"; //+ OrderDate filter

        $http.get(url)
          .success(function(data) {
            service.sales = data.d.results;
            setTotalAmount(service.sales);
            def.resolve(service.sales);
          })
          .error(function(error){
            def.reject("Failed to get sales");
          })
          .finally(function() {
            return def.promise;
         });
    }

    function setTotalAmount(sales){
        var sum = 0;
        sales.forEach(function (invoice){
            sum += invoice.AmountDC;
        });
        service.totalAmount = sum;
    }
})

其不起作用的原因是:

dailyValue: GetDailyVal('A1')
在这里,GetDailyVal对api进行异步ajax调用。为了处理异步请求,必须在GetDailyVal函数中返回如下承诺:

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

对于weeklyValue也需要做同样的事情。

我认为您的代码中有一些错误

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

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

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);
      }
}
}]);

首先检查GetDailyVal()和GetWeeklyVal()是否正确执行。我分别调用这些函数,它们工作并产生正确的值,但当我尝试加载基于Json的网格时,它将不再工作。你能给我看更多的代码吗?检查这篇文章,也许这会给你一个线索:我可以从Json中获取其余的值,并将它们加载到我的网格中。问题在于如何获得承诺的价值。我应该把计算值的代码部分也放进去吗?GetDailyVal和GetWeeklyVal是否从api获取值?我知道为什么它不起作用,因为控制器中没有关于GetDailyVal和GetWeeklyVal的承诺。不过,我不知道如何在json对象中添加承诺……最好的方法是在循环中分别加载dailyValue和weeklyValue。很抱歉,如果有时间,您可以发布一个示例吗?
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);
      }