这里是Javascript和Node 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);
}
});
}
}
此功能应该进行简单的更新,仅此而已。它在这里使用:
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();
});
答案 0 :(得分:1)
问题在于调用函数时,您只是在发送错误数量的参数。
该函数接受四个输入:columns, returnColumns, type, callback
。但是在您的示例中,您要发送五个输入:req.body.entities, conditions, returnColumns, type, function (err, products)
因此忽略最后一个(在这种情况下为函数)。该函数接收的值为callback
的值实际上就是您在调用该函数时已命名为type
的那个值,因为这是您提供的第四个参数。此值不是可执行函数-错误消息告诉您。
现在我不知道哪些值是您实际需要/想要发送给函数的值,但是显然其中之一是多余的,您需要将其从调用代码中删除。纯粹基于名称,我猜想不需要req.body.entities
或conditions
中的一个,但是我当然看不到这些变量包含什么,而且我不确定您的意图,所以您必须自己解决。
P.S。我还注意到,您的函数实际上从未使用过接收到的returnColumns
或type
参数,因此您可能应该考虑是否真的需要接受这些参数。也许可以将其删除。