首页 > 解决方案 > JS函数返回函数而不是值

问题描述

我一直在尝试通过从 Firebase 数据库中获取数据来使用 JS 制作一个简单的数学函数。我们有两种类型——收入和支出。

最初这里是引用 Firebase 的代码片段


    let reference = firebase.database().ref("expenditure");
    let reference1=firebase.database().ref("income");

这让我们可以创建两个不同的数据库,分别命名为支出收入

现在,我创建了两个函数来遍历数据库中的元素并将其添加到变量中

这些函数应该分别返回支出和收入。



var income=0;

var expenditure=0;



function amount(data){
    let expens = data.val();
    let keys = Object.keys(expens);
    console.log(keys.length);

    for( let i=0;i<keys.length;i++){

    let a =keys[i];
    let amount_a = expens[a].Amount;

    var p=parseInt(amount_a);
    var expenditure=p+expenditure;

    }


    return expenditure;
}



function amount1(data){
    let expens = data.val();
    let keys = Object.keys(expens);
    console.log(keys.length);

    for( let i=0;i<keys.length;i++){

    let a =keys[i];
    let amount_a = expens[a].Amount;

    var p=parseInt(amount_a);
    var income=p+income;

    }


    return income;
}

如您所见,我已经声明了两个函数来返回收入和支出

现在,我在另一个名为result()

function result(){
    var a=reference.on("value",amount);
    var b=reference1.on("value",amount1);
    console.log(b-a);
}

result();

这应该返回我净额(收入-支出)但是,我amount(data),amount1(data)在 console.log 中获得了相同的功能,而不是返回收入和支出的价值。

我尝试了几种方法,但无法弄清楚。

在此处查看 Console.log

控制台.log({a,b})

标签: javascriptreactjsfirebase-realtime-database

解决方案


Firebase.on(...)函数不会从数据库返回值,它会将值发送到作为参数传递的回调函数。

您应该使用回调函数更新变量。假设你的数据库结构是这样的:

(root)
-- expenditure
---- (key)
------- Amount: 0
---- (key)
------- Amount: 0
-- income
---- (key)
------- Amount: 0
---- (key)
------- Amount: 0

那么你的代码应该更像这样:

let expenditureRef = firebase.database().ref("expenditure");
let incomeRef = firebase.database().ref("income");

let expenditures = 0;
let income = 0;

let netAmount = 0;


expenditureRef.on("value", function (snapshot) {
    snapshot.forEach(function (childSnapshot) {
        expenditures += parseInt(childSnapshot.val().Amount);
        netAmount = income - expenditures;
    }
});

incomeRef.on("value", function (snapshot) {
    snapshot.forEach(function (childSnapshot) {
        income += parseInt(childSnapshot.val().Amount);
        netAmount = income - expenditures;
    }
});

我无法对此进行测试,所以如果这不起作用,请随时告诉我,我可以尝试修复它。

我还强烈建议您阅读此处的文档: https ://firebase.google.com/docs/database/web/read-and-write


推荐阅读