将数据从db推入数组后调用另一个javascript函数

Calling another javascript function after pushing data from db into an array

本文关键字:调用 另一个 javascript 函数 数组 数据 db      更新时间:2023-09-26

这段代码从db中检索数据然后推入angularJS脚本中的数组

if(type == 'createSupplierInvoice'){
            vm.data.organization = {};
            vm.data.organization.selected = {
                name: result.data.name,
                id: result.data.organization_id
            } 
            vm.data.ship_request_id = result.data.ship_request_id;
            vm.data.terms = Number(result.data.payment_terms);  
            if(result.products.length > 0){
                for(var i = 0;i<result.products.length;i++){
                    vm.products.push({
                        id: result.products[i].id,
                        product_id: result.products[i].ship_product_id,
                        code : result.products[i].ship_product_code,
                        description : result.products[i].ship_product_description,
                        request_quotation_detail_id : result.products[i].ship_request_quotation_detail_id,
                        qty : result.products[i].qty,
                        price : result.products[i].price,
                        total_price : result.products[i].total_price,
                        remarks : result.products[i].remarks,
                        temp_tax : 0,
                        temp_total: 0,
                        temp_subtotal: 0,
                    });
                }
            }
            for(var d = 0; d < vm.products.length; d++){
                calculateTotal(vm.products[d]);  
                console.log(vm.products[d]);
            }
        }

这是我的calculateTotal函数

function calculateTotal(items){
    console.log(items);
    var tax            = parseFloat(vm.data.tax_percentage);
    var qty            = parseFloat(items.qty);
    var price          = parseFloat(items.price);
    var temp_total     = parseFloat(0), temp_subtotal  = parseFloat(0);
    temp_subtotal += (qty * price);
    tax        = parseFloat(temp_subtotal * (vm.data.tax_percentage * 1) / 100);
    temp_total    += parseFloat(temp_subtotal + tax);
    items.temp_tax      = parseFloat(tax);
    items.temp_subtotal = parseFloat(temp_subtotal);
    items.temp_total    = parseFloat(temp_total);
    setTotal();
}
function setTotal(){
    var calculated_tax = parseFloat(0), calculated_subtotal = parseFloat(0), calculated_total = parseFloat(0);
    for(var i = 0; i < vm.products.length; i++){
        calculated_tax      += parseFloat(vm.products[i].temp_tax);
        calculated_subtotal += parseFloat(vm.products[i].temp_subtotal);
        calculated_total    += parseFloat(vm.products[i].temp_total);
    }
    vm.data.total_tax  = parseFloat(calculated_tax).toFixed(2);
    vm.data.subtotal   = parseFloat(calculated_subtotal).toFixed(2);
    vm.data.grandtotal = parseFloat(calculated_total).toFixed(2);
}

我通过将console.log(items)放入calculateTotal函数中来测试代码,但它从未触发。该函数在被数据库中的数据推送后不会在数组循环中被调用。

但是console.log(vm.products[d])工作正常。它显示了正确的数据。如果我复制粘贴这两个函数(calculateTotal和setTotal)中的所有代码,它也在工作。我不知道为什么calculateTotal函数没有被触发,如果我直接在循环中调用它。有人能给我指路吗?

您在什么时候声明了函数?你的功能附在瞄准镜上吗?如果你在声明之前调用函数,我猜会有问题。

我尝试了一个示例代码,对我来说工作得很好。

 var a=[
{'name':'jack','age':23},
{'name':'jones','age':24}
]
var calculateTotal= function(items){
  console.log(items);
}
for(var d = 0; d < a.length; d++){
  calculateTotal(a[d].name);
  console.log(a[d].name);
}

JSFIDDLE