node.js - Typeerror 回调不是 Nodejs 中的函数

标签 node.js sql-server async-await

我正在使用 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/

相关文章:

node.js - 保存文件后运行 Nodejs 命令

sql-server - PDO 插入到 MSSQL 日期时间交换日期和月份

c# - 不可能两次运行 IAsyncEnumerable 的枚举?

javascript - Node 中的异步代码 - 避免重复使用 async/await

javascript - 异步每个和 foreach 函数

node.js - node js - 我在使用 JSON.parse() 时遇到了一些问题

javascript - 使用nodeJS和phantomJS返回网络请求和响应,只能在控制台工作

c# - 如何在 C# 中将 SELECT COUNT 语句的结果作为字符串返回?

sql-server - Azure ADF V2 - 完成时的事件

c# - 在 Select linq 查询中使用 async/await