Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 回调不是节点JS中更新的函数_Javascript_Node.js_Sql Server - Fatal编程技术网

Javascript 回调不是节点JS中更新的函数

Javascript 回调不是节点JS中更新的函数,javascript,node.js,sql-server,Javascript,Node.js,Sql Server,这里是Javascript中的begginer和节点Js。 在尝试执行第一个简单的更新函数时,我遇到了错误: TypeError:回调不是函数 我在网上搜索答案,但这个问题仍然是个谜 function UpdateProductsCodes(columns, returnColumns, type, callback) { for (var i = 0; i < columns.ids.length; i++) { updateSql = "UPDATE TPr

这里是Javascript中的begginer和节点Js。 在尝试执行第一个简单的更新函数时,我遇到了错误:

TypeError:回调不是函数

我在网上搜索答案,但这个问题仍然是个谜

function UpdateProductsCodes(columns, returnColumns, type, callback) {

    for (var i = 0; i < columns.ids.length; i++) {

        updateSql = "UPDATE TProductCodes SET code =?, product_id =? OUTPUT inserted.id, inserted.code, inserted.product_id INTO #returnValues WHERE ids =?";
        var params = [];

        params.push(columns.codes[i]);
        params.push(columns.product_ids[i]);
        params.push(columns.ids[i]);

        sql.query(conn_str, updateSql, params, function (err, products, more) {
            //Code stops here
            //TypeError: callback is not a function

            if (err) {
                callback(err, null);
                return;
            };
            if (!more) {
                callback(null, products);
            }
        });
    }
}

问题在于,调用函数时,您只是发送了错误数量的参数

该函数接受四个输入:
列、returnColumns、type、callback
。但在您的示例中,您将发送五个输入:
req.body.entities、conditions、returnColumns、type、function(err、products)

最后一个(在本例中为函数)因此被忽略。函数作为
回调
值接收的值实际上是调用函数时命名的
类型
,因为这是您提供的第四个参数。此值不是一个可执行函数-这是错误消息告诉您的

现在我不知道哪些值是您实际需要/想要发送给函数的值,但很明显其中一个是多余的,您需要从调用代码中删除它。纯粹根据名称,我猜不需要
req.body.entities
条件
中的任何一个,但我当然看不到这些变量包含什么,也不能确定您的意图,因此您必须自己解决它



<> P.S.我还注意到,您的函数实际上从未使用过“<代码>返回栏或<代码>类型< /COD>参数,因此您可能需要考虑是否真的需要接受这些参数。也许可以删除它们。

您能说明如何调用“UpdateProductsCodes”吗?您将传递什么作为回调参数?如果我使用:If(callback){callback(err,null);}我将再次获得erorr:TypeError:callback不是一个function@CristiPriciu演示如何调用UpdateProductCodes函数。错误消息告诉您,无论为
回调
选项提供了什么值,该值都不是可执行函数。它可能是字符串、数字或对象,但它肯定不是函数。它需要是一个函数。看看你是如何创造和提供价值的。如果您需要帮助,请向我们展示与此相关的代码。谢谢,我在最初的帖子中添加了。
UpdateProductsCodes(req.body.entities, conditions, returnColumns, type, function (err, products) {
if (err) {
    console.dir(err);
    res.writeHead(500, { 'Content-Type': 'application/json' });
    res.write(JSON.stringify(utils.GenerateResponse(err.message, true, 'JSON')));
    res.end();
    return;
}

res.writeHead(200, { 'Content-Type': 'application/json' });
res.write(JSON.stringify(utils.GenerateResponse(products, false, type)));
res.end();
});