带有数据库的Javascript回调

Javascript callback with database

本文关键字:Javascript 回调 数据库      更新时间:2023-12-26

我是Javascript和回调函数的新手。这是回电话的正确方式吗?当我测试时,我得到一个无限循环。我想从数据库中检索并存储在对象的变量中,以便在getSport()中使用。

constructor(matchid) {
    this.hasLoaded = false;
    this.matchid = mid;
    this.Match = {
        "sport": "baskt",
        "winner": -1,
    };
}
rload(callback) {
    this.hasLoaded = true;
    matchDataBaseRef.child(this.mid)
        .on("value", function (snapshot) {
            this.Match = snapshot.val();
            callback();
        });
}
get getSport() {
    if (!this.hasLoaded) {
        this.rload(this.getSport);
    }
    return this.Match['sport'];
}

这不是正确的方法。您正在尝试在this.getSport中进行同步。相反,你应该在回调中进行初始化,不要无限调用它

function myTask(params) {
    //do something
    params.callback();
    //do something
}

那么你不应该这样工作,除非你有一个很好的理由:

var foo = function() {
    myTask({callback: foo});
};

相反,在大多数情况下,你需要这样的东西:

var foo = function(cb) {
    myTask({callback: cb});
};

CCD_ 2需要单独定义。因此,如果这不是您想要做的,请不要将包装器函数作为回调传递