我正在使用 foreach 循环根据数据长度多次执行具有不同变量的单个查询。我使用异步来执行此操作,以便我可以通过同步来执行此操作。但是当我使用回调函数时,我收到类型错误。在数据库中插入第一行后,它因错误而停止插入。我搜索了几种解决方案。但没有解决我的问题。不知道下一步该怎么做。如果您能找到此代码的任何解决方案,请提前致谢。
var async = require('async');
async.forEachOfSeries(data, function (dataElement, callback){
request.input('input_id', mssql.Int,dataElement.id);
request.input('input_service_name', mssql.VarChar(25),dataElement.service_name );
request.input('input_msisdn',mssql.VarChar(255),dataElement.msisdn);
request.input('input_sms',mssql.Text,dataElement.sms);
//request.input('input_datetime',mssql.DateTime,data[i].datetime);
request.input('input_smsid',mssql.BigInt,dataElement.smsid);
request.input('input_status',mssql.VarChar(20),dataElement.status);
request.input('input_txid',mssql.VarChar(200),dataElement.txid);
request.query("insert into mt_log (id,service_name,msisdn,sms,smsid,status,txid) values (@input_id,@input_service_name,@input_msisdn,@input_sms,@input_smsid,@input_status,@input_txid)", (err, result) => {
if(err){
console.log(err);
callback();
}
else{
console.log("inserting");
callback();
}
});
}, function(err){
if(err){
//handle the error if the query throws an error
}else{
//whatever you wanna do after all the iterations are done
}
});
Error
D:\LCT Work\node project\Datashiftingtolct2\server.js:109
callback();
^
TypeError: callback is not a function
at request.query (D:\LCT Work\node project\Datashiftingtolct2\server.js:109:21)
at _query (D:\LCT Work\node project\Datashiftingtolct2\node_modules\mssql\lib\base.js:1347:9)
at Request.tds.Request.err [as userCallback] (D:\LCT Work\node project\Datashiftingtolct2\node_modules\mssql\lib\tedious.js:671:15)
at Request.callback (D:\LCT Work\node project\Datashiftingtolct2\node_modules\tedious\lib\request.js:37:27)
at Connection.endOfMessageMarkerReceived (D:\LCT Work\node project\Datashiftingtolct2\node_modules\tedious\lib\connection.js:2104:20)
at Connection.dispatchEvent (D:\LCT Work\node project\Datashiftingtolct2\node_modules\tedious\lib\connection.js:1084:36)
at Parser.tokenStreamParser.on (D:\LCT Work\node project\Datashiftingtolct2\node_modules\tedious\lib\connection.js:914:14)
at Parser.emit (events.js:198:13)
at Parser.parser.on.token (D:\LCT Work\node project\Datashiftingtolct2\node_modules\tedious\lib\token\token-stream-parser.js:27:14)
at Parser.emit (events.js:198:13)
Here the 109 line is the callback(); in else statement
最佳答案
假设您使用的是异步库 v1.5x,根据 the documentation ,您传递给 async.forEachOfSeries()
的函数有三个参数,而不是两个,并且回调到达第三个参数,而不是第二个。
因此,您尝试调用不是函数的东西(因此您看到的错误),它实际上是 key
参数,而不是 callback
参数。
更改此:
async.forEachOfSeries(data, function (dataElement, callback){
对此:
async.forEachOfSeries(data, function (dataElement, key, callback){
关于node.js - Typeerror 回调不是 Nodejs 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57602388/