带参数的Javascript回调函数

带参数的Javascript回调函数,javascript,callback,Javascript,Callback,电话: Query.GetDepartments(AcademicYears, function (result) { console.log(result) }) 职能: exports.GetDepartments = function (callback, AcademicYears) { CountAcademicYears = Object.keys(AcademicYears).length;

电话:

Query.GetDepartments(AcademicYears, function (result) {
                    console.log(result)
                })
职能:

exports.GetDepartments = function (callback, AcademicYears) {
    CountAcademicYears = Object.keys(AcademicYears).length;
    switch (CountAcademicYears) {
        case 1:
            AcademicYear1 = AcademicYears[0].Year;
            AcademicYear1 = String(AcademicYear1);
            query = "SELECT [p_departement], [depcode], [departement], [schooljaar] FROM [SA_Departement] WHERE schooljaar='" + AcademicYear1 + "'";
            console.log(query);
            (async function () {
                try {
                    let result = await globalConnectionInfordat.request()
                        .query(query);
                    callback(result.recordset);
                } catch (err) {
                    console.log(err);
                }
            })();
            break;
        ..........

    }
}
这给了我一个错误:

'Incorrect syntax near the keyword \'function\'.',
由于某种原因,字符串没有被正确地读出(我想)?有什么想法吗

我只需要知道如何将参数传递给函数

编辑

出于某种原因,我不得不将这些词移动:函数(Academicyears,callback)正在工作


谢谢你的帮助

回调是一个局部变量。它只存在于
函数(查询、回调){/*…*/}

您不能从该函数外部使用它(即,在传递给
ExecuteSql
的匿名函数中)

您需要创建对该函数的另一个引用,然后使用该名称:

this.ExecuteSql("SELECT ...", function a_named_function (result) {
            a_named_function(result);
        });
…但递归调用该函数毫无意义。

根据“ExecuteSql”的定义,它接受2个参数。 1.字符串2。功能

因此,当您调用该模块时

应该是:

  this.ExecuteSql("your string", function (result) {
                   console.log(result);
                });

希望这对您有所帮助。

这里的回调函数是
function(result){/*do stuff with result*/}
,而不是在回调函数中引用
callback
,因为这是另一个方法
ExecuteSql
的私有函数。它的工作方式是:将函数作为第二个参数传递,您不能选择何时调用它或将哪个参数传递给它。您的函数将存储在
回调
本地变量中(这是
导出的方式。ExecuteSql
控制何时执行以及输入内容)。在函数中,您可以随意使用
result
,但是
callback
在此未定义,但该函数中定义了callback,因为该函数也是通过回调调用的?一点也不,您作为参数传递的函数将是
callback
的值。“callback”不是javascript关键字,它只是一个变量(实际上是
getDepartments
的参数)。它也可以被命名为“c”或“dog”,并用“c(result.recordset)”或“dog(result.recordset)”调用。当然,这个参数只适用于这个函数getDepartments。在这个问题的新版本中,您在定义和调用之间切换了
回调
回调
,因此它不会起作用。是的,我现在得到了更好的回调想法!但问题是(我想)如果你明白我的意思的话,我回叫了《盗梦空间》?我现在修改了代码,这样就没有了《盗梦空间》,现在它可以完美地工作了!谢谢这不会改变错误,错误不是关于回调,而是关于函数本身的回调。ExecuteSql(“您的字符串”,函数(结果){anathor_回调(结果);});函数anathor_callback(data){console.log(data);}是的,我正在修改我的代码,这样就没有“inception”。请看一下更新后的问题,它仍然给出了一个错误。错误来自函数本身?@Milan_w-什么错误?它现在应该抛出一个错误,比如“超出调用堆栈”,因为您正在无条件地递归调用函数,正如我在回答中所说的,这毫无意义。我更改了代码。我认为回调中的回调永远不会起作用。你能看看更新后的代码吗?这给了我一个新的错误,我不明白为什么?@Milan\u w-如果你想问一个关于新代码的新错误消息的新问题……那么